User u = new User();
Type t = typeof(User);
u is User -> returns true
u is t -> compilation error
Comment tester si une variable est d'un certain type de cette manière?
Réponses:
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
t
par typeof(Animal)
. Ainsi la forme améliorée de Mark devient t.IsInstanceOfType(x)
.
GetType()
existe sur chaque type de cadre, car il est défini sur le object
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:
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 GetType()
méthode:
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.
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
u is t
tu devrais écrire
typeof(t).IsInstanceOfType(u)
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).