J'ai vu de nombreuses personnes utiliser le code suivant :
Type t = typeof(obj1);
if (t == typeof(int))
// Some code here
Mais je sais que vous pouvez aussi faire ceci :
if (obj1.GetType() == typeof(int))
// Some code here
Ou ceci :
if (obj1 is int)
// Some code here
Personnellement, je pense que la dernière est la plus propre, mais y a-t-il quelque chose qui m'échappe ? Laquelle est la meilleure à utiliser, ou est-ce une préférence personnelle ?
Utilisez typeof
quand vous voulez obtenir le type au temps de compilation. Utilisez GetType
quand vous voulez obtenir le type au début de l'exécution. Il y a rarement des cas où l'on peut utiliser is
car il fait un cast et, dans la plupart des cas, vous finissez par faire un casting de la variable de toute façon.
Il y a une quatrième option à laquelle vous n'avez pas pensé (surtout si vous avez l'intention de faire un casting d'un objet avec le type que vous avez trouvé) ; c'est d'utiliser as
.
Foo foo = obj as Foo;
if (foo != null)
// your code here
Ceci n'utilise qu'un seul cast alors que cette approche :
if (obj is Foo)
Foo foo = (Foo)obj;
en nécessite deux.
Cela dépend de ce que je fais. Si j'ai besoin d'une valeur bool (par exemple, pour déterminer si je dois faire un cast vers un int), j'utiliserai is
. Si j'ai besoin du type pour une raison quelconque (par exemple, pour le passer à une autre méthode), j'utiliserai GetType()
.