2016-05-01 125 views
5

我正在计算每种类型的对象在字典中显示的数量,但是当计算业余类型的对象时,它也计算专业和名人类型的所有对象,因为它们是业余爱好者的孩子。无论如何解决这个问题没有删除继承,只计算只有业余类型的对象?计数不包含子对象的类型对象,可能吗?

示例代码:

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

恕我直言算业余的,你的产业,没有太大的意义。如果有的话,我会让这些类都继承一个名为'Competitor'的类。 –

回答

6

当然,这是可能的。例如使用简单Where(或Count与谓词)与确切类型匹配:

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

谢谢,这个作品完美。 :) – Naglfar705

2

OfType<T>计数可被强制转换为T这显然是用于T一个子类的情况下的所有元素。假设,你的所有manager.competitors的要么是专业人士,名人或业余爱好者和那些集是不同的,你可以间接

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