Если вы хотите объединить произвольное (ранее неизвестное) число списков, то вам может потребоваться объединить коллекцию списков. Вероятно, самый простой способ сделать это - использовать оператор SelectMany
(или вложенные предложения from
в запросе LINQ):
IEnumerable<List<int>> lists = /* get list of lists */;
List<int> result = lists.SelectMany(e => e).ToList();
Оператор SelectMany
вызывает данную функцию для каждого элемента списка ввода (который является списком) и затем объединяет все результирующие списки (фактические списки из вашего списка ввода списков). Альтернативно, используя синтаксис запроса LINQ:
List<int> result = (from l in lists
from e in l select e).ToList();
Я считаю, что компилятор C # может на самом деле оптимизировать это, чтобы он не перебирал все отдельные элементы (и делал то же самое, что и явная версия выше). Если у вас есть известное количество списков, вы, конечно, можете написать:
List<int> result = (from l in new[] { list1, list2, list3, list4 }
from e in l select e).ToList();
Это не так элегантно, как определение собственного метода именно для этой цели, но он показывает, насколько мощным является синтаксис запроса LINQ.