Это интересная проблема, я бы, возможно, пошел за синтаксис выражения запроса, где это можно сделать следующим образом
int[] array = {1,2,3,3,4,5};
var query = from item in array.Select((val, index) => new { val, index })
join nextItem in array.Select((val, index) => new { val, index })
on item.index equals (nextItem.index + 1)
where item.val == nextItem.val
select item.val;
Что бы извлечь 3 из массива (или списка). Конечно, то, что можно сделать в выражении запроса, очевидно, можно сделать в лямбде.
Редактировать Решение Джоэла намного проще, чем мое, и если вам просто нужно, чтобы оно работало со списком или массивом, оно идеально. Если вам нужно что-то более гибкое для работы с любым IEnumerable, вы должны стремиться к чему-то подобному выше (или что-то явно лучше).