I've seen wielu ludzi używa następujących kodów:
Type t = typeof(obj1);
if (t == typeof(int))
// Some code here
Ale wiem, że możesz również zrobić to:
if (obj1.GetType() == typeof(int))
// Some code here
Albo to:
if (obj1 is int)
// Some code here
Osobiście czuję, że ostatni jest najczystszy, ale czy jest coś, czego mi brakuje? Który z nich jest najlepszy do użycia, czy to osobiste preferencje?
Użyj typeof
gdy chcesz uzyskać typ w czasie kompilacji. Użyj GetType
gdy chcesz uzyskać typ w czasie wykonywania. Rzadko zdarzają się przypadki użycia is
, ponieważ wykonuje on rzutowanie, a w większości przypadków i tak kończysz rzutowanie zmiennej.
Jest jeszcze czwarta opcja, której nie brałeś pod uwagę (szczególnie jeśli zamierzasz rzucić obiekt na typ, który znalazłeś); to jest użycie as
.
Foo foo = obj as Foo;
if (foo != null)
// your code here
Używa to tylko jednej obsady podczas tego podejścia:
if (obj is Foo)
Foo foo = (Foo)obj;
wymaga dwóch rzutów.
To zależy od tego, co ja'robię. Jeśli potrzebuję wartości bool (powiedzmy, aby określić, czy I'll cast do int), I'll użyć is
. Jeśli faktycznie potrzebuję typ z jakiegoś powodu (powiedzmy, aby przekazać go do innej metody), użyję GetType()
.