113 votes

Comment vérifier si la variable est de type d'un type c'est stockée dans une variable

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

u is User -> returns true

u is t -> compilation error -

comment tester si une variable est de type de cette façon?

223voto

Eric Lippert Points 300275

Les autres réponses contiennent tous des omissions importantes.

L' is opérateur de ne pas vérifier si le moteur d'exécution type de l'opérande est exactement le type donné; au contraire, il vérifie pour voir si le moteur d'exécution type 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 type identité , de réflexion, de vérifications de l'identité, pas de 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, alors 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.

16voto

Dave Bish Points 7943

GetType() existe sur chaque cadre unique type, car elle est définie sur la base object type. Donc, quel que soit le type lui-même, vous pouvez l'utiliser pour retourner au sous-jacents Type

Donc, tout ce que vous devez faire est de:

u.GetType() == t

11voto

Sam Holder Points 13935

Vous avez besoin de voir si le Type de votre instance est égal au Type de la classe. Pour obtenir le type de l'instance que vous utilisez l' GetType() méthode:

 u.GetType().Equals(t);

ou

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

vous devriez le faire. Évidemment, vous pourriez utiliser "= = " pour faire votre comparaison, si vous préférez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X