Pozostałe odpowiedzi zawierają istotne pominięcia.
is
Operator ma nie sprawdzić, czy rodzaj runtime argumentu jest dokładnie dany typ; raczej sprawdza, czy typ środowiska wykonawczego jest zgodny z danym typem:
class Animal {}
class Tiger : Animal {}
...
object x = new Tiger();
bool b1 = x is Tiger;
bool b2 = x is Animal;
Ale sprawdzanie tożsamości typu z odbiciami sprawdza tożsamość , a nie zgodność
bool b5 = x.GetType() == typeof(Tiger);
bool b6 = x.GetType() == typeof(Animal);
or with the type variable
bool b7 = t == typeof(Tiger);
bool b8 = t == typeof(Animal);
Jeśli nie tego chcesz, prawdopodobnie chcesz IsAssignableFrom:
bool b9 = typeof(Tiger).IsAssignableFrom(x.GetType());
bool b10 = typeof(Animal).IsAssignableFrom(x.GetType());
or with the type variable
bool b11 = t.IsAssignableFrom(x.GetType());
bool b12 = t.IsAssignableFrom(x.GetType());
typeof(Animal).IsInstanceOfType(x)
jest krótszy i prostszy niżtypeof(Animal).IsAssignableFrom(x.GetType());
(a Resharper zasugeruje użycie pierwszego, jeśli użyjesz drugiego).t
natypeof(Animal)
. Tak więc staje się ulepszona forma Markat.IsInstanceOfType(x)
.GetType()
istnieje w każdym typie frameworka, ponieważ jest zdefiniowany wobject
typie podstawowym . Tak więc, niezależnie od samego typu, możesz go użyć do zwrócenia bazowegoType
Więc wszystko, co musisz zrobić, to:
źródło
Musisz sprawdzić, czy typ Twojej instancji jest równy typowi klasy. Aby uzyskać typ instancji, użyj
GetType()
metody:lub
u.GetType.Equals(typeof(User));
powinien to zrobić. Oczywiście możesz użyć '==' do porównania, jeśli wolisz.
źródło
u.GetType.Equals(typeof(User));
t
która zawiera typ.Aby sprawdzić, czy obiekt jest zgodny ze zmienną danego typu, zamiast pisać
u is t
powinieneś napisać
typeof(t).IsInstanceOfType(u)
źródło