Как проверить соответствие типов переменных Тип, хранящийся в переменной

User u = new User();
Type t = typeof(User);

u is User -> returns true

u is t -> compilation error

Как проверить, имеет ли какая-либо переменная какой-либо тип таким образом?

Ответ 1

Другие ответы содержат существенные упущения.

Оператор is не проверяет, является ли тип выполнения операнда точно заданным типом; скорее, он проверяет, совместим ли тип среды выполнения с данным типом:

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.

Но проверяя идентификатор типа с проверкой на отражение для идентификации, а не для совместимости

bool b3 = x.GetType() == typeof(Tiger); // true
bool b4 = x.GetType() == typeof(Animal); // false! even though x is an animal

Если это не то, что вы хотите, тогда вы, вероятно, захотите IsAssignableFrom:

bool b5 = typeof(Tiger).IsAssignableFrom(x.GetType()); // true
bool b6 = typeof(Animal).IsAssignableFrom(x.GetType()); // true! A variable of type Animal may be assigned a Tiger.

Ответ 2

GetType() существует для каждого типа структуры, потому что он определен в базовом типе object. Поэтому, независимо от самого типа, вы можете использовать его для возврата базового Type

Итак, все, что вам нужно сделать, это:

u.GetType() == t

Ответ 3

Вам нужно убедиться, что тип вашего экземпляра равен типу класса. Чтобы получить тип экземпляра, вы используете метод GetType():

 u.GetType().Equals(t);

или

 u.GetType.Equals(typeof(User));

должен это сделать. Очевидно, вы могли бы использовать '==' для сравнения, если хотите.

Ответ 4

Чтобы проверить, совместим ли объект с данной переменной типа, вместо записи

u is t

вам следует написать

typeof(t).IsInstanceOfType(u)