Die anderen Antworten enthalten alle signifikante Auslassungen.
Der is
Operator prüft nicht , ob der Laufzeittyp des Operanden genau dem angegebenen Typ entspricht. Stattdessen wird geprüft, ob der Laufzeittyp mit dem angegebenen Typ kompatibel ist :
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.
Die Überprüfung der Typidentität mit Reflection prüft jedoch die Identität und nicht die Kompatibilität
bool b5 = x.GetType() == typeof(Tiger); // true
bool b6 = x.GetType() == typeof(Animal); // false! even though x is an animal
or with the type variable
bool b7 = t == typeof(Tiger); // true
bool b8 = t == typeof(Animal); // false! even though x is an
Wenn Sie das nicht möchten, möchten Sie wahrscheinlich IsAssignableFrom:
bool b9 = typeof(Tiger).IsAssignableFrom(x.GetType()); // true
bool b10 = typeof(Animal).IsAssignableFrom(x.GetType()); // true! A variable of type Animal may be assigned a Tiger.
or with the type variable
bool b11 = t.IsAssignableFrom(x.GetType()); // true
bool b12 = t.IsAssignableFrom(x.GetType()); // true! A
typeof(Animal).IsInstanceOfType(x)
ist kürzer und unkomplizierter alstypeof(Animal).IsAssignableFrom(x.GetType());
(und Resharper schlägt vor, das erstere zu verwenden, wenn Sie das letztere verwenden).t
fürtypeof(Animal)
. So wird Marks verbesserte Formt.IsInstanceOfType(x)
.GetType()
existiert für jeden einzelnen Framework-Typ, da er für den Basistyp definiert istobject
. Unabhängig vom Typ selbst können Sie damit den Basiswert zurückgebenType
Alles was Sie tun müssen ist:
quelle
Sie müssen überprüfen, ob der Typ Ihrer Instanz dem Typ der Klasse entspricht. Um den Instanztyp abzurufen, verwenden Sie die folgende
GetType()
Methode:oder
Sollte es tun. Natürlich können Sie '==' verwenden, um Ihren Vergleich durchzuführen, wenn Sie dies bevorzugen.
quelle
u.GetType.Equals(typeof(User));
t
die den Typ enthält.Um zu überprüfen, ob ein Objekt mit einer bestimmten Typvariablen kompatibel ist, anstatt zu schreiben
du solltest schreiben
quelle