У меня есть список списков, которые я хочу найти для такого пересечения:
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()?
EDIT:
Я должен был быть более ясным в этом: у меня действительно есть список списков, я не знаю, сколько их будет, три списка выше были просто примером, что у меня есть на самом деле IEnumerable<IEnumerable<SomeClass>>
Решение
Спасибо за отличные ответы. Оказалось, что существует четыре варианта решения этого вопроса: Список + агрегат (@Marcel Gosselin), Список + foreach (@JaredPar, @Gabe Moothart), HashSet + агрегат (@jesperll) и HashSet + foreach (@Tony the Pony). Я провел некоторое тестирование производительности этих решений (варьируя количество списков, количество элементов в каждом списке и случайное число max.
Оказывается, что для большинства ситуаций HashSet работает лучше, чем List (за исключением больших списков и небольшого размера случайных чисел, из-за природы HashSet, я думаю). Я не мог найти никакой реальной разницы между методом foreach и агрегированным методом (метод foreach работает немного лучше.)
Для меня агрегированный метод действительно привлекателен (и я согласен с этим как принятый ответ), но я бы не сказал, что это наиболее читаемое решение.. Еще раз спасибо!