Ho visto molte persone usare il seguente codice:
Type t = typeof(obj1);
if (t == typeof(int))
// Some code here
Ma so che si può anche fare così:
if (obj1.GetType() == typeof(int))
// Some code here
O questo:
if (obj1 is int)
// Some code here
Personalmente, sento che l'ultimo è il più pulito, ma c'è qualcosa che mi sfugge? Qual è il migliore da usare, o è una preferenza personale?
Usate typeof
quando volete ottenere il tipo al tempo di compilazione. Usate GetType
quando volete ottenere il tipo al tempo di esecuzione. Raramente ci sono casi in cui si deve usare is
, perché fa un cast e, nella maggior parte dei casi, si finisce comunque per fare il casting della variabile.
C'è una quarta opzione che non hai considerato (specialmente se hai intenzione di lanciare anche un oggetto al tipo che trovi): usare as
.
Foo foo = obj as Foo;
if (foo != null)
// your code here
Questo usa solo un cast mentre questo approccio:
if (obj is Foo)
Foo foo = (Foo)obj;
richiede due.
Dipende da quello che sto facendo. Se ho bisogno di un valore bool (ad esempio, per determinare se farò il cast di un int), userò is
. Se ho effettivamente bisogno del tipo per qualche motivo (ad esempio, per passare a qualche altro metodo) userò GetType()
.