3

に渡される関数がありSelectます。しかし、上記の関数にブレークポイントを設定しても、プログラムは壊れません。

例:

public static int PlusTwo(int x)
{
  return x + 2;
}

public static void Main(string[] args)
{
  var foo = new[] { 2, 3, 5, 7 };
  var bar = foo.Select(PlusTwo);
}
4

3 に答える 3

9

それは遅延評価のためです。を実行しようとするToList()と、関数が評価され、ブレークポイントにヒットします。つまり、次のことを試してください。

var bar = foo.Select(PlusTwo).ToList();
于 2013-05-30T08:00:54.447 に答える
6

Enumerable は遅延評価されます。

これは、結果の反復処理を開始するまで関数が呼び出されないことを意味します。

追加する場合:

for(var x in bar) ...

次に、関数が呼び出されます。

すぐに結果を取得したい場合は、bar.ToArray()またはを呼び出しますbar.ToList()。これは、列挙型を内部的に反復して結果を作成し、関数が確実に呼び出されるようにします。

于 2013-05-30T08:00:53.223 に答える
1

実行が延期されたLINQを使用しています。つまり、その操作の結果が必要になるまで実行されません。したがって、それに対して foreach を実行する必要がある場合。その後、実行されます。

于 2013-05-30T08:01:51.900 に答える