Tür Denetimi: typeof, GetType veya is?

Birçok kişinin aşağıdaki kodu kullandığını gördüm:

Type t = typeof(obj1);
if (t == typeof(int))
    // Some code here

Ama bunu sizin de yapabileceğinizi biliyorum:

if (obj1.GetType() == typeof(int))
    // Some code here

Ya da bunu:

if (obj1 is int)
    // Some code here

Şahsen, sonuncusunun en temizi olduğunu düşünüyorum, ama kaçırdığım bir şey mi var? Hangisini kullanmak en iyisi, yoksa bu kişisel bir tercih mi?

Türü derleme zamanında almak istediğinizde typeof kullanın. Türü çalıştırma zamanında almak istediğinizde GetType kullanın. Bir döküm yaptığı ve çoğu durumda değişkeni zaten dökümlediğiniz için is kullanmanız gereken nadir durumlar vardır.

Göz önünde bulundurmadığınız dördüncü bir seçenek daha vardır (özellikle de nesneyi bulduğunuz türe dökecekseniz); bu da as kullanmaktır.

Foo foo = obj as Foo;

if (foo != null)
    // your code here

Bu yaklaşımda yalnızca bir döküm kullanılır:

if (obj is Foo)
    Foo foo = (Foo)obj;

iki** gerektirir.

Yorumlar (6)

Sonuncusunun kalıtıma da baktığına inanıyorum (örneğin, Dog is Animal == true), ki bu çoğu durumda daha iyidir.

Yorumlar (0)

Ne yaptığıma bağlı. Eğer bir bool değerine ihtiyacım varsa (örneğin, bir int değerine döküm yapıp yapmayacağımı belirlemek için), is kullanırım. Eğer gerçekten bir nedenle tipe ihtiyacım varsa (örneğin, başka bir metoda aktarmak için) GetType() kullanırım.

Yorumlar (1)