2016-05-01 19 views
5

Tôi đang cố đếm số lượng của từng loại đối tượng trong từ điển để hiển thị chúng, tuy nhiên khi đếm các đối tượng thuộc loại Amateur, nó cũng tính tất cả các đối tượng thuộc loại Chuyên nghiệp và Người nổi tiếng vì chúng là con của Amateur. Có anyway để sửa lỗi này mà không loại bỏ các thừa kế và chỉ đếm đối tượng của chỉ loại Amateur?Đếm đối tượng loại mà không đếm đối tượng trẻ em, có thể?

Mẫu mã:

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, thừa kế của bạn không có ý nghĩa nhiều. nếu có, tôi sẽ có những lớp này kế thừa một lớp duy nhất có tên là "Đối thủ cạnh tranh". –

Trả lời

6

Tất nhiên nó có thể. Ví dụ sử dụng một đơn giản Where (hoặc Count với vị ngữ) với chính xác loại kết hợp:

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

Cảm ơn, công trình này hoàn hảo. :) – Naglfar705

2

OfType<T> đếm tất cả các yếu tố có thể được đúc để T mà rõ ràng là trường hợp cho một lớp con của T. Giả định, rằng tất cả các manager.competitors của bạn hoặc là các chuyên gia, người nổi tiếng hay nghiệp dư và những bộ là khác biệt, bạn có thể đếm nghiệp dư gián tiếp bởi

int prof = manager.competitors.Values.OfType<Professional>().Count(); 
int celeb = manager.competitors.Values.OfType<Celebrity>().Count(); 
int amateurs = manager.competitors.Count() - (prof + celebs) 
Các vấn đề liên quan