你可以使用可枚举的.Zip() http://msdn.microsoft.com/en-us/library/dd267698.aspxSystem.Linq 中的方法。
IEnumerable<ValueTuple<A, B>> pairs =
listA.Zip(listB, (a, b) => ValueTuple.Create(a, b));
可以简化为ValueTuple
由右侧的括号暗示=>
。 (在左侧,它们包含 lambda 参数。):
var pairs = listA.Zip(listB, (a, b) => (a, b));
但实际上可以进一步简化,因为有一个重载为我们创建了元组:
var pairs = listA.Zip(listB);
使用此结果可枚举的示例:
foreach (ValueTuple<A, B> pair in pairs)
{
A a = pair.First;
B b = pair.Second;
}
一个可以使用var
隐藏这里的类型,但我们实际上可以更进一步,在循环中进行模式匹配,将这些字段绑定到变量:
foreach (var (a, b) in pairs)
{
...
}
在 .NET 4.7 之前,您将需要使用Tuple
代替ValueTuple
,明确指定类型并使用Item1
and Item2
代替First
and Second
.