2010-03-22 13 views
7

varsayalım benKoleksiyonda belirli türde örnek içerip içermediği nasıl algılanır?

Collection<IMyType> coll; 

gibi koleksiyon oluşturmak Sonra

Sonra toplama coll tipi T1 bir örneğini içeriyorsa bilmek istiyorum ... T1, T2, T3, gibi IMyTypem birçok implelentations var. Bu yüzden param, sınıf örneği değil, sınıf türü olmalıdır, burada bir örnek yazmak istiyorum. Bu tür bir sorun için kod nasıl yazılır? gibi

public bool ContainsType(this IEnumerable collection, Type type) 
{ 
     return collection.Any(i => i.GetType() == type); 
} 

Sonra diyoruz:

+0

LINQ to Objects nesnelerini kullanabilir misiniz? Hangi C# sürümünü kullanıyorsunuz? Döngüden kaçınmak ve lambda kullanmak için – wtaniguchi

cevap

9

bunu yapabilirsiniz

bool hasType = coll.ContainsType(typeof(T1)); 

bir koleksiyon belirtilen türe dönüştürülebilen bir tür içeriyorsa görmek istiyorsanız, yapabileceğiniz :

bool hasType = coll.OfType<T1>().Any(); 

Bu argo yanı T1 herhangi alt sınıflarını içeriyorsa doğru döner gibi olsa da, farklı.

+0

+1. –

+0

Çok teşekkür ederim. – KentZhou

+0

Sonra, Bu yöntem nasıl çağrılır? Coll.COntainsType (T1)? VS'de kabul edilmez. Hata var dedi: 'T1' bir 'tip' ama 'değişken' – KentZhou

İlgili konular