您可以使用LinkedList
其他人已经建议的 a 或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> 相同类型的返回变量,我还忘了提到我使用的是开放的泛型类型而不是封闭的泛型类型。
编辑:这是另一种使用 a 的方法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);
元组类