2010-05-04 22 views
5

Aşağıdaki kodu girersem bir hata alıyorum. Temel olarak, foreach bir etiket olmayan bir Kontrol ile karşılaşıldığında kırılacaktır.Foreach'i yalnızca belirli bir koleksiyondan iade etmek için kullanabilir miyim?

Böyle bir şey yapmak zorundayım.

foreach (Control currControl in this.Controls()) { 
    if(typeof(Label).Equals(currControl.GetType())){ 

    ... 
    } 

} 

Herkes, türünü kontrol etmek gerekmeden bunu yapmanın daha iyi bir yolunu düşünebilir mi? Her nasılsa foreach Etiketleri olmayan nesneleri atlayabilir miyim? .NET 3.5 veya daha yeni üzerinde iseniz Bkz

+0

.NET 3.5 kullanıyor musunuz? LINQ kullanabilir misin? – Strelok

cevap

6

Brian en vermiştir T., yapılamıyor türlerini göz ardı eder bu

foreach(var label in this.Controls().OfType<Label>()) { 
} 

OfType<T> gibi bir şey yapabilirsiniz OfType açısından uygun cevap. Bununla birlikte, 'un yapması gereken durumlarda, türleri kontrol etmenin daha iyi bir yolu olduğunu belirtmek istedim. Bunun yerine mevcut kod:

if(typeof(Label).Equals(currControl.GetType())){ 

... 
} 

Sen kullanabilirsiniz:

if (currControl is Label) 
{ 
    Label label = (Label) currControl; 
    // ... 
} 

ya:

Label label = currControl as Label; 
if (label != null) 
{ 
    // ... 
} 

Not Bu alternatiflerin her ikisi da, Label alt sınıflarını içereceğini hangisi orijinal kod yok.

+0

'da bunu yapıp yapamayacağımı merak ediyorum. – Diskdrive

İlgili konular