2010-06-09 4 views
8

У меня есть суперкласс с именем «ClassA» и два подкласса «Class1» и «Class2».foreach унаследованный (подкласс) объект в списке суперкласса

У меня есть список, содержащий объекты «Class1» и «Class2», этот список имеет тип «ClassA».
Я хочу проходной только объекты «class1» в списке, делая что-то вроде

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

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

но когда я делаю, что код генерирует исключение, когда он достигает объект, который не относится к типу «Class1 ».

Как это можно сделать простым способом, не проверяя тип объекта в списке и не применяя его, если это правильный тип. как это:

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

ответ

12

Использование LINQ:

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

Обратите внимание, что если вы хотите, чтобы проверить тип в цикле, то as и is операторы предназначены для этого. Как:

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

Я должен использовать .NET 2.0 и не может использовать LINQ – Amr

+0

Используйте "как" вариант тогда. – Meligy

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

Я должен использовать .NET 2.0 и не могу использовать LINQ – Amr

Смежные вопросы