2016-05-01 12 views
5

Her bir nesne türünün bunları göstermek için sözlükte kaçını saymaya çalışıyorum, ancak Amatör türünde nesneler sayılırken, Amatör'ün çocukları oldukları için Profesyonel ve Ünlü türünün tüm nesnelerini de sayar. Miras kaldırmak ve sadece sadece Amatör türlerini saymak için OLMADAN bunu düzeltmek için var mı?Sayma Nesneleri çocuk nesnelerini saymadan yazabilir, mümkünse?

Örnek kod: Elbette

private void GetTotalEntries() 
{ 
    string amateurEntries; 
    string profEntries; 
    string celebEntries; 

    amateurEntries = manager.competitors.Values.OfType<Amateur>().Count().ToString(); 
    profEntries = manager.competitors.Values.OfType<Professional>().Count().ToString(); 
    celebEntries = manager.competitors.Values.OfType<Celebrity>().Count().ToString(); 

    EntriesTextBox.Text = "Amateur Entries:" + amateurEntries + "\nProfessional Entries:" + profEntries + "\nCelebrity Entries:" + celebEntries; 
} 
+2

IMHO dolaylı amatörleri saymak varsaymışlardı, Kişisel miras çok mantıklı değil. eğer bir şey varsa, bu sınıfların hepsinin “Rakip” olarak adlandırılan tek bir sınıfı miras alması gerekirdi. –

cevap

6

bu mümkün.

amateurEntries = manager.competitors.Values 
    .Where(x => x.GetType() == typeof(Amateur)).Count().ToString(); 
+0

Teşekkürler, bu mükemmel çalışıyor. :) – Naglfar705

2

OfType<T> sayar açıkçası T bir alt sınıf için böyledir hangi T için dökülebilir tüm unsurları: kesin türü maçında ile basit Where (veya Count yüklemi) kullanılarak Mesela. , Senin manager.competitors tüm ya profesyoneller, ünlüler veya amatör ve bu setleri ayrık olduğunu, sen

int prof = manager.competitors.Values.OfType<Professional>().Count(); 
int celeb = manager.competitors.Values.OfType<Celebrity>().Count(); 
int amateurs = manager.competitors.Count() - (prof + celebs)