Поиск коллекции для подтипа в C # / Linq - PullRequest
1 голос
/ 29 июня 2010

Если у меня есть такая коллекция, как

List<SomeAbstractBaseType> someList = new List<SomeAbstractBaseType>();

И я добавил два разных дочерних типа в эту коллекцию (т.е. два дочерних типа наследуются от SomeAbstractBaseType) следующим образом:

someList.Add(someChildOfType1);
someList.Add(someChildOfType2);
someList.Add(someOtherChildOfType1);
someList.Add(someOtherChildOfType2);
* 1006Скажем, я хочу запросить все элементы someChildOfType1.Как я могу это сделать, я попробовал следующее (который не компилируется, может преобразовать из дочернего типа в родительский тип)
List<ChildType1> temp = someList.Where(x => x.GetType() == typeof(ChildType1)).ToList();

Есть идеи, как я мог это сделать?

Ответы [ 3 ]

4 голосов
/ 29 июня 2010
List<ChildType1> temp = someList.OfType<ChildType1>().ToList();
0 голосов
/ 02 декабря 2010

Enumerable.OfType<T>() доступен только в .NET 3.5 и выше, поэтому, похоже, вам нужно решение, которое будет работать в .NET 3.0

Проблема в том, что, хотя вы нашли все подтипы, список по-прежнему имеет базовый тип. Один из способов создать список подтипов - использовать ConvertAll для приведения объектов, которые, как вы знаете, имеют правильный тип:

List<ChildType1> temp = someList.FindAll(x => x is ChildType1).ConvertAll(x => (ChildType1) x);
0 голосов
/ 29 июня 2010

Enumerable.OfType<T>() метод расширения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...