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?
1426
3
Türü derleme zamanında almak istediğinizde
typeof
kullanın. Türü çalıştırma zamanında almak istediğinizdeGetType
kullanın. Bir döküm yaptığı ve çoğu durumda değişkeni zaten dökümlediğiniz içinis
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.Bu yaklaşımda yalnızca bir döküm kullanılır:
iki** gerektirir.
Sonuncusunun kalıtıma da baktığına inanıyorum (örneğin, Dog is Animal == true), ki bu çoğu durumda daha iyidir.
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.