2012-07-27 13 views
10

İçinde bir adet List<BaseClass> var. Listeyi (ve özellikle de tüm üyelerini) türüne, ChildClassBaseClass öğelerini devretmek istiyorum. Ben foreach üzerinden aynı sonucu alabilirsiniz biliyorum: Bunu yapmanın daha düzgün bir yolDökülü yayın Listeleme <BaseClass> listelenecek <ChildClass>

List<ChildClass> ChildClassList = new List<ChildClass>(); 
foreach(var item in BaseClassList) 
{ 
    ChildClassList.Add(item as ChildClass); 
} 

Ama var? Not - Bu WP7 platformunda yapılır. Eğer tüm öğeleri dökümü yapılabilir vardır gerçekten eminseniz

cevap

18

Bunu yapabilirsin: Bir AnaSınıf öğesi ChildClass için döküm edilemezse

ChildClassList = BaseClassList.Cast<ChildClass>().ToList(); 

Geçerli kod null ekler.

ChildClassList = BaseClassList.Select(x => x as ChildClass).ToList(); 

Ama doğrusu tip kontrolleri içeren, bu öneririm ve eşleşmeyen öğelerini atlar: o gerçekten niyeti olsaydı, bu eşdeğer olacak aşağıdaki

ChildClassList = BaseClassList.OfType<ChildClass>().ToList(); 
+0

Botz'ın yolunu deneyin ... –

+0

Teşekkürler - bu durumda, her öğenin belirtilen türde olduğundan eminim. Modellerimi, akıllı sınıfların dilsizliği devraldığı "aptal" (yalnızca özellikler) ve "akıllı" (tüm işlevler) sürümlerinde böldüm. İlk örnek burada olduğu gibi çalıştı - yardım için teşekkürler! Bu senin için de geçerli #Adam Houldsworth –

3

var childList = baseList.OfType<ChildClass>().ToList(); 

Bu igno olacaktır: mevcut kodun (tek eksik şey başarısız atmalarını için boş değerlere eklemez olduğunu) hemen hemen eşdeğer olduğunu Listenin ChildClass dışındaki başka türetilmiş bir sınıf içerdiği durumlar.

var childList = baseList.Cast<ChildClass>().ToList(); 

Ama bu döküm olamaz şeylere InvalidCastException atar:

de kullanabilirsiniz.

İlgili konular