È possibile utilizzare il metodo Enumerable.Zip() in System.Linq.
IEnumerable<Tuple<A, B>> pairs = listA.Zip(listB, (a, b) => Tuple.Create(a, b));
Esempio utilizza questo risultante enumerable:
foreach (Tuple<A, B> pair in pairs)
{
A a = pair.Item1;
B b = pair.Item2;
}
peccato non c'è un sovraccarico che automatizza il tupleation NET. Tale estensione sarebbe simile a questa:
public static IEnumerable<Tuple<TFirst, TSecond>> Zip<TFirst, TSecond>(this IEnumerable<TFirst> first, IEnumerable<TSecond> second)
{
return first.Zip(second, Tuple.Create);
}
Il che significa che si può quindi scrivere codice simile:
IEnumerable<Tuple<A, B>> pairs = listA.Zip(listB);
Nota: Un'altra opzione potrebbe essere quella di creare tipi anonimi, invece di Tuple
ma il rovescio della medaglia a questo approccio è che non sarebbe possibile (utilmente) passare l'IEnumerable risultante dal metodo che è stato creato, a causa del tipo che non ha un nome.
fonte
2011-08-18 16:23:13
vedono questo http://stackoverflow.com/questions/166089/what-is- c-analog-of-c-stdpair –