User u = new User();
Type t = typeof(User);
u is User -> returns true
u is t -> compilation error
Как проверить, имеет ли какая-либо переменная какой-либо тип таким образом?
User u = new User();
Type t = typeof(User);
u is User -> returns true
u is t -> compilation error
Как проверить, имеет ли какая-либо переменная какой-либо тип таким образом?
Другие ответы содержат существенные упущения.
Оператор 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.
GetType()
существует для каждого типа структуры, потому что он определен в базовом типе object
. Поэтому, независимо от самого типа, вы можете использовать его для возврата базового Type
Итак, все, что вам нужно сделать, это:
u.GetType() == t
Вам нужно убедиться, что тип вашего экземпляра равен типу класса. Чтобы получить тип экземпляра, вы используете метод GetType()
:
u.GetType().Equals(t);
или
u.GetType.Equals(typeof(User));
должен это сделать. Очевидно, вы могли бы использовать '==' для сравнения, если хотите.
Чтобы проверить, совместим ли объект с данной переменной типа, вместо записи
u is t
вам следует написать
typeof(t).IsInstanceOfType(u)