Как преобразовать объединенный общий список в общий список?

95
14

У меня есть два общих списка, которые были объединены. Скажем listA и listB, оба типа List<SomeType>.

listA.Union(listB);

Объединенный набор имеет тип System.Linq.Enumerable.UnionIterator<string>, который не совпадает с List<SomeType>.

Я пробовал кастинг:

listA.Union(listB).ToList<SomeType>();

а также

(List<SomeType>)listA.Union(listB);

Оба терпят неудачу. Я попытался получить доступ к ForEach(), думая, что могу добавить результат в новый список. .Foreach() недоступен.

Я мог бы использовать традиционный foreach и добавлять каждый элемент в переменную List<SomeType>. Однако существует ли инструкция lambda, которая может выполнять преобразование в одной строке, присваивая переменной типа List<SomeType>?

спросил(а) 2012-10-02T07:11:00+04:00 7 лет, 9 месяцев назад
1
Решение
85

Вам не нужно явно использовать метод List in ToList. Если оба списка одного типа, вы можете просто сделать ToList в конце, чтобы получить список того же типа.

List<MyClass> listA = new List<MyClass>();
List<MyClass> listB = new List<MyClass>();
List<MyClass> temp = listA.Union(listB).ToList(); //Just do ToList at the end.

Явное указание типа в методе ToList также должно работать. Я не уверен, почему он не работает.

ответил(а) 2012-10-02T07:26:00+04:00 7 лет, 9 месяцев назад
39

Union - это метод расширения в интерфейсе IEnumerable<T>, а не в List<T>, поэтому он не знает или не заботится о том, чтобы вы пытались подключить списки и, следовательно, не создавали его в результате, если вы не вызываете ToList явно.

Если вы хотите "прикрепить" один список к другому, вы можете вместо этого использовать метод AddRange.

ответил(а) 2012-10-02T07:55:00+04:00 7 лет, 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема