2010-06-09 39 views
8

Tôi có một lớp siêu có tên là "ClassA" và hai tiểu lớp "Class1" và "Class2".foreach kế thừa (sub-class) đối tượng trong một danh sách siêu lớp

Tôi có danh sách chứa các đối tượng của "Class1" và "Class2", danh sách đó thuộc loại "ClassA".
Tôi muốn lặp qua chỉ là "Class1" các đối tượng trong danh sách bằng cách làm một cái gì đó giống như

List<ClassA> AList = new List<ClassA>; 
AList.Add(new Class1()); 
AList.Add(new Class2()); 

foreach (Class1 c1 in AList) 
{ 
    // Do Something 
} 

nhưng khi tôi làm điều đó, mã ném một ngoại lệ khi nó đạt đến một đối tượng mà không phải là loại "Class1 ".

Làm cách nào để thực hiện điều này một cách đơn giản mà không cần phải kiểm tra loại đối tượng trong danh sách và truyền nó nếu đó là loại chính xác. như thế này:

foreach (ClassA cA in AList) 
{ 
    if (cA.GetType() == typeof(Class1)) 
    { 
     // Do Something 
    } 
} 

Trả lời

12

Sử dụng LINQ:

foreach (Class1 c1 in AList.OfType<Class1>()) { } 

Lưu ý rằng nếu bạn muốn kiểm tra cho một loại trong một vòng lặp, các asis nhà khai thác có ý nghĩa cho việc này. Giống như:

foreach (ClassA cA in AList) { 
    Class1 c1 = cA as Class1; 
    if (c1 != null) { 
    // do something 
    } 
} 
+0

tôi phải sử dụng .NET 2.0 và không thể sử dụng LINQ – Amr

+0

Sử dụng "là" lựa chọn sau đó. – Meligy

1
foreach(Class1 c1 in AList.OfType<Class1>()) 
{ 
    //do something 
} 
+0

Tôi phải sử dụng .NET 2.0 và không thể sử dụng LINQ – Amr

Các vấn đề liên quan