LinkedList他の人がすでに提案したように、またはElementAtOrDefault次のいずれかを使用できます。
var result = list.Select((s,i) => new { This=s, Next=list.ElementAtOrDefault(i+1) });
foreach(var x in result)
Console.WriteLine("{0}.{1}",x.This,x.Next);
デモはこちら: http://ideone.com/Qwiwc
結果変数は匿名型であってはなりません。IEnumerable> や List> のような同じ型の戻り変数が必要です。閉じた型ではなく、開いたジェネリック型を使用していることを忘れていました。
編集:これは、を使用した別のアプローチIEnumerable<Tuple<T, T>>です:
public static IEnumerable<Tuple<TSource, TSource>> ToLinkedSequence<TSource>(this IEnumerable<TSource> input)
{
return input.Select((x,i) => Tuple.Create(x, input.ElementAtOrDefault(i + 1)));
}
どのように使用しますか:
var sequence = new[] { "One", "Two", "Three", "Four", "Five" };
var linkedSequence = sequence.ToLinkedSequence();
foreach (var x in linkedSequence)
Console.WriteLine("{0}.{1}", x.Item1, x.Item2);
タプルクラス