Ich habe gesehen, dass viele Leute den folgenden Code verwenden:
Type t = typeof(obj1);
if (t == typeof(int))
// Some code here
Aber ich weiß, dass man das auch so machen kann:
if (obj1.GetType() == typeof(int))
// Some code here
Oder dies:
if (obj1 is int)
// Some code here
Ich persönlich halte die letzte Variante für die sauberste, aber gibt es etwas, das ich übersehe? Welches ist am besten zu verwenden, oder ist das eine persönliche Vorliebe?
Verwenden Sie typeof
, wenn Sie den Typ zur Kompilierungszeit ermitteln wollen. Verwenden Sie GetType
, wenn Sie den Typ zur Ausführungszeit abfragen wollen. Es gibt kaum Fälle, in denen is
verwendet werden sollte, da es einen Cast durchführt und in den meisten Fällen die Variable sowieso gecastet wird.
Es gibt noch eine vierte Möglichkeit, die Sie nicht in Betracht gezogen haben (vor allem, wenn Sie ein Objekt auch auf den gefundenen Typ casten wollen); das ist die Verwendung von as
.
Foo foo = obj as Foo;
if (foo != null)
// your code here
Dabei wird nur ein Cast verwendet, während dieser Ansatz:
if (obj is Foo)
Foo foo = (Foo)obj;
zwei benötigt.
Ich glaube, die letzte Option berücksichtigt auch die Vererbung (z. B. Hund ist Tier == wahr), was in den meisten Fällen besser ist.
Das hängt davon ab, was ich tue. Wenn ich einen bool-Wert benötige (z. B. um festzustellen, ob ich in einen int-Wert umwandeln kann), verwende ich "is". Wenn ich den Typ aus irgendeinem Grund benötige (z. B. um ihn an eine andere Methode zu übergeben), verwende ich "GetType()".