User u = new User();
Type t = typeof(User);
u is User -> returns true
u is t -> compilation error
Comment puis-je tester si une variable est d'un type de cette manière?
Les autres réponses contiennent toutes des omissions importantes.
L'opérateur is
effectue pas vérifie si le type d'exécution de l'opérande est exactement le type donné; au contraire, 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 vérifier pour le type identité avec vérification de la réflexion pour identité, pas pour compatibilité
bool b3 = x.GetType() == typeof(Tiger); // true
bool b4 = x.GetType() == typeof(Animal); // false! even though x is an animal
Si ce n'est pas ce que vous voulez, vous voudrez probablement 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()
existe sur chaque type de framework, car il est défini sur le type de base object
. Donc, quel que soit le type, vous pouvez l’utiliser pour retourner le sous-jacent Type
Donc, tout ce que vous avez à faire est:
u.GetType() == t
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 méthode GetType()
:
u.GetType().Equals(t);
ou
u.GetType.Equals(typeof(User));
devrait le faire. Évidemment, vous pouvez utiliser '==' pour faire votre comparaison si vous préférez.
Afin de vérifier si un objet est compatible avec une variable de type donnée, au lieu d'écrire
u is t
tu devrais écrire
typeof(t).IsInstanceOfType(u)