2013-07-24 19 views
14

is işlecinden yararlanabilmek için aşağıdakilere alternatif bulmaya çalışıyorum.İşlecine bir argüman iletmenin bir yolu var mı?

public bool IsOfType(Type type) 
{ 
    return this._item.GetType() == type; 
} 

Aşağıdaki gibi bir şey derleme yapmaz.

public bool IsOfType(Type type) 
{ 
    return this._item is type; 
} 

cevap

28

Sana Type.IsAssignableFrom aradığınız düşünüyorum:

public bool IsOfType(Type type) 
{ 
    return _item != null && type.IsAssignableFrom(_item.GetType()); 
} 

Yoksa yöntem genel yapabilir eğer, o daha basit olduğu gibi bir tür parametresi ile can kullanım is:

public bool IsOfType<T>() 
{ 
    return _item is T; 
} 

DÜZENLEME: Wim'in cevabında belirtildiği gibi, jenerik olmayan meth yapan Type.IsInstanceOf da var. od basit:

public bool IsOfType(Type type) 
{ 
    return type.InstanceOf(_item); 
} 
+2

Sen beni alt;) –

+1

Güncellenmiş cevabı görmek zorunda mı ... Neden jenerik alternatifi göndermek üzereydim? :) –

+1

Her zaman InstanceOf sözdizimini sevmedim, neredeyse bunu önlemek için 'object' üzerinde bir uzantı yöntemini yapmaya değer. – demoncodemonkey

12

Sen bağlama göre birden şey yapabilirsiniz:

  • Kullanım Type.IsAssignableFrom(Type) sahip olduğun tüm iki tip örnekleri ise. Karşılaştırılacak bir örneğe erişiminiz varsa, Type.IsInstanceOf(object instance) kullanın. gibi
  • Kullanım jenerik:

    public bool IsOfType<T>() 
    { 
        return this._item is T; 
    } 
    
+2

olmalıdır Tip.IsInstanceOf hakkında unuttum. Doh! Cevabımı tam bir örneğiyle düzenleyeceğim ... –

+0

Aslında "IsInstanceOf" değil, "IsInstanceOfType" denir. –

İlgili konular