Check if 'T' inherits or implements a class/interface

There is a Method called Type.IsAssignableFrom().

To check if T inherits/implements Employee:

typeof(Employee).IsAssignableFrom(typeof(T));

If you are targeting .NET Core, the method has moved to TypeInfo:

typeof(Employee).GetTypeInfo().IsAssignableFrom(typeof(T).Ge‌​tTypeInfo())

Note that if you want to constrain your type T to implement some interface or inherit from some class, you should go for @snajahi's answer, which uses compile-time checks for that and genereally resembles a better approach to this problem.


You can use constraints on the class.

MyClass<T> where T : Employee

Take a look at http://msdn.microsoft.com/en-us/library/d5x73970.aspx


If you want to check during compilation: Error if if T does NOT implement the desired interface/class, you can use the following constraint

public void MyRestrictedMethod<T>() where T : MyInterface1, MyInterface2, MySuperClass
{
    //Code of my method here, clean without any check for type constraints.
}

I hope that helps.


The correct syntax is

typeof(Employee).IsAssignableFrom(typeof(T))

Documentation

Return Value: true if c and the current Type represent the same type, or if the current Type is in the inheritance hierarchy of c, or if the current Type is an interface that c implements, or if c is a generic type parameter and the current Type represents one of the constraints of c, or if c represents a value type and the current Type represents Nullable<c> (Nullable(Of c) in Visual Basic). false if none of these conditions are true, or if c is null.

source

Explanation

If Employee IsAssignableFrom T then T inherits from Employee.

The usage

typeof(T).IsAssignableFrom(typeof(Employee)) 

returns true only when either

  1. T and Employee represent the same type; or,
  2. Employee inherits from T.

This may be intended usage in some case, but for the original question (and the more common usage), to determine when T inherits or implements some class/interface, use:

typeof(Employee).IsAssignableFrom(typeof(T))