2016-05-01 13 views
5

Próbuję policzyć, ile z każdego rodzaju obiektów znajduje się w słowniku, aby je wyświetlić, jednak podczas liczenia obiektów typu Amator zlicza również wszystkie obiekty typu Profesjonalista i Celebrytki, ponieważ są one dziećmi Amatora. Czy mimo to można to naprawić BEZ usuwania dziedzictwa i liczenia tylko obiektów typu Amateur?Liczenie obiektów typu bez liczenia obiektów podrzędnych, możliwe?

Przykładowy kod:

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, Twój dziedziczenie nie ma większego sensu. jeśli cokolwiek, chciałbym, aby te klasy dziedziczyły pojedynczą klasę zwaną Konkurentem. –

Odpowiedz

6

Oczywiście jest to możliwe. Na przykład za pomocą prostego Where (lub Count z orzecznika) z dokładnym typu meczu:

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

Dzięki, to działa idealnie. :) – Naglfar705

2

OfType<T> zlicza wszystkie elementy, które mogą być oddane do T co jest oczywiście w przypadku podklasy T. Zakłada się, że wszystkie manager.competitors albo są profesjonaliści, amatorzy i Sławy lub te zestawy są różne, można liczyć amatorów pośrednio przez

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