Les autres réponses contiennent toutes des omissions importantes.
L' is
opérateur ne vérifie pas si le type d'exécution de l'opérande est exactement le type donné; plutôt, il vérifie si le type d'exécution est compatible avec le type donné:
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.
Mais la vérification de l' identité du type avec la réflexion vérifie l' identité , pas la compatibilité
bool b5 = x.GetType() == typeof(Tiger); // true
bool b6 = x.GetType() == typeof(Animal); // false! even though x is an animal
or with the type variable
bool b7 = t == typeof(Tiger); // true
bool b8 = t == typeof(Animal); // false! even though x is an
Si ce n'est pas ce que vous voulez, alors vous voulez probablement 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 type variable
bool b11 = t.IsAssignableFrom(x.GetType()); // true
bool b12 = t.IsAssignableFrom(x.GetType()); // true! A
typeof(Animal).IsInstanceOfType(x)
est plus court et plus simple quetypeof(Animal).IsAssignableFrom(x.GetType());
(et Resharper suggérera d'utiliser le premier si vous utilisez le second).t
partypeof(Animal)
. Ainsi la forme améliorée de Mark devientt.IsInstanceOfType(x)
.GetType()
existe sur chaque type de cadre, car il est défini sur leobject
type de base . Ainsi, quel que soit le type lui-même, vous pouvez l'utiliser pour renvoyer le sous-jacentType
Donc, tout ce que vous avez à faire est:
la source
Vous devez voir si le type de votre instance est égal au type de la classe. Pour obtenir le type de l'instance, utilisez la
GetType()
méthode:ou
devrait le faire. Évidemment, vous pouvez utiliser '==' pour faire votre comparaison si vous préférez.
la source
u.GetType.Equals(typeof(User));
t
qui contient le type.Afin de vérifier si un objet est compatible avec une variable de type donnée, au lieu d'écrire
tu devrais écrire
la source