Le altre risposte contengono tutte omissioni significative.
L'operatore fa is
non controllo se il tipo di runtime operando è esattamente tipo indicato; piuttosto, controlla per vedere se il tipo di runtime è compatibile con il tipo di dato:
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.
Ma il controllo di tipo identità con gli assegni di riflessione per identità, non per compatibilità
bool b3 = x.GetType() == typeof(Tiger); // true
bool b4 = x.GetType() == typeof(Animal); // false! even though x is an animal
Se questo non è quello che vuoi, allora probabilmente desideri 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.
fonte
2012-05-02 14:51:39
Mentre l'approccio finale mostrato qui funziona, è inutilmente prolisso. 'typeof (Animale) .IsInstanceOfType (x)' è più corto e più diretto di 'typeof (Animale). IsAssignableFrom (x.GetType());' (e Resharper suggerirà di usare il primo se si usa quest'ultimo). –