2

それらをリストに変換し、インデックスを使用して通常の for ループを使用することもできますが、それらを IEnumerables として保持する方法があるかどうか疑問に思っています。

4

2 に答える 2

6

.NET4.0の新しいZip機能が必要だと思います。Eric Lippertは最近それについてブログを書き、実装の簡単な形式を含めました。

これは、MoreLINQのZip.csにもあり、シーケンス長さが同じでない場合にさまざまなオプションを使用できます。「デフォルト」は、.NET 4.0のように動作し、いずれかのシーケンスで要素がなくなると停止します。別の方法は、短いシーケンスを埋めるか、例外をスローすることです。

于 2009-05-16T20:47:23.067 に答える
5

デフォルトでは方法はありませんが、拡張メソッドを追加して少し簡単にすることは難しくありません。簡潔にするために、両方が同じ長さであることを確認するために、いくつかのエラーチェックを除外しました。

public static void ForEachPair<T1,T2>(
  this IEnumerable<T1> source1, 
  IEnumerable<T2> source2,
  Action<T1,T2> del) {
  using ( var e1 = source1.GetEnumerator() )
  using ( var e2 = source2.GetEnumerator() ) {
    while ( e1.MoveNext() && e2.MoveNext() ) {
      del(e1.Current, e2.Current);
    }
  }
}

これで、次のことができます

var list = GetSomeList();
var otherList = GetSomeOtherList();
list.ForEachPair(otherList, (x,y) => 
{
   // Loop code here
});
于 2009-05-16T20:48:03.720 に答える