How to check if variable's type matches Type stored in a variable

c#, reflection, types

Solution

The other answers all contain significant omissions.

The `is` operator does not check if the runtime type of the operand is exactly the given type; rather, it checks to see if the runtime type is compatible with the given type:

class Animal {}
class Tiger : Animal {}
...
object x = new Tiger();
bool b1 = x is Tiger; // true
bool b2 = x is Animal; // true also! Every tiger is an animal.

But checking for type identity with reflection checks for identity, not for compatibility

bool b5 = x.GetType() == typeof(Tiger); // true
bool b6 = x.GetType() == typeof(Animal); // false,
// even though x is an animal

// or with the variable "Type t" from the question:
bool b7 = t == typeof(Tiger); // true
bool b8 = t == typeof(Animal); // false,
// even though x is an animal

If that's not what you want, then you probably want IsAssignableFrom:

bool b9 = typeof(Tiger).IsAssignableFrom(x.GetType()); // true
bool b10 = typeof(Animal).IsAssignableFrom(x.GetType()); // true,
// a variable of type Animal may be assigned a Tiger.

// or with the variable "Type t" from the question:
bool b11 = t.IsAssignableFrom(x.GetType()); // true
bool b12 = t.IsAssignableFrom(x.GetType()); // true

Problem

``` User u = new User(); Type t = typeof(User); u is User -> returns true u is t -> compilation error ``` How do I test if some variable is of some type in this way?

Original source