наследуемый (подкласс) объект в списке суперклассов - PullRequest
9 голосов
/ 09 июня 2010

У меня есть суперкласс с именем "ClassA" и два подкласса "Class1" и "Class2".

У меня есть список, содержащий объекты "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
    }
}

Ответы [ 2 ]

13 голосов
/ 09 июня 2010

Использование 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
  }
}
2 голосов
/ 09 июня 2010
foreach(Class1 c1 in AList.OfType<Class1>())
{
    //do something
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...