У меня есть список списков, для которых я хочу найти пересечение, например:
var list1 = new List<int>() { 1, 2, 3 };
var list2 = new List<int>() { 2, 3, 4 };
var list3 = new List<int>() { 3, 4, 5 };
var listOfLists = new List<List<int>>() { list1, list2, list3 };
// expected intersection is List<int>() { 3 };
Есть ли способ сделать это с помощью IEnumerable.Intersect ()?
РЕДАКТИРОВАТЬ: Я должен был быть более ясным по этому поводу: у меня действительно есть список списков, я не знаю, сколько их будет, три приведенных выше списка были просто примером, то, что у меня есть, на самом деле IEnumerable<IEnumerable<SomeClass>>
РЕШЕНИЕ
Спасибо за отличные ответы. Оказалось, что существует четыре варианта решения этой проблемы: List + aggregate (@Marcel Gosselin), List + foreach (@JaredPar, @Gabe Moothart), HashSet + aggregate (@jesperll) и HashSet + foreach (@Tony the Pony). Я провел несколько тестов производительности этих решений (различное количество списков , количество элементов в каждом списке и максимальный размер случайного числа .
Оказывается, в большинстве ситуаций HashSet работает лучше, чем List (за исключением больших списков и небольшого размера случайных чисел, я полагаю, из-за природы HashSet). Я не смог найти реальной разницы между методом foreach и агрегатом. метод (метод foreach работает немного лучше.)
Для меня метод агрегирования действительно привлекателен (и я буду использовать его как принятый ответ), но я бы не сказал, что это наиболее удобочитаемое решение. Еще раз всем спасибо!