Вы можете использовать метод Enumerable.Zip () в System.Linq.
IEnumerable<Tuple<A, B>> pairs = listA.Zip(listB, (a, b) => Tuple.Create(a, b));
Пример использования этого результирующего перечисляемого:
foreach (Tuple<A, B> pair in pairs)
{
A a = pair.Item1;
B b = pair.Item2;
}
Позор естьне перегрузка, которая автоматизирует кортеж в .NET.Такое расширение будет выглядеть так:
public static IEnumerable<Tuple<TFirst, TSecond>> Zip<TFirst, TSecond>(this IEnumerable<TFirst> first, IEnumerable<TSecond> second)
{
return first.Zip(second, Tuple.Create);
}
Что означает, что вы можете написать код, который выглядит следующим образом:
IEnumerable<Tuple<A, B>> pairs = listA.Zip(listB);
Примечание. Другой вариант - создание анонимных типов вместоTuple
но недостатком этого подхода является то, что вы не сможете (с пользой) передать полученный IEnumerable из метода, в котором он создан, из-за того, что тип не имеет имени.