2016-05-01 3 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

IMHO गिनती कर सकता है, आपका विरासत ज्यादा मतलब नहीं है। यदि कुछ भी हो, तो मेरे पास इन कक्षाओं में सभी को 'प्रतियोगी' नामक एक वर्ग का उत्तराधिकारी होगा। –

उत्तर

6

बेशक यह संभव है।

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

धन्यवाद, यह पूरी तरह से काम करता है। :) – Naglfar705

2

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) 
संबंधित मुद्दे

 संबंधित मुद्दे