2016-05-01 6 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」という1つのクラスを継承します。 –

答えて

6

それが可能です。

+0

ありがとう、これは完全に動作します。 :) – Naglfar705

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

OfType<T>カウント明らかTのサブクラスの場合であるTにキャストすることができるすべての要素を:例えば、正確なタイプの一致と簡単Where(又は述語とCount)を使用。想定し、あなたの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)