注:私はメソッドが値のコレクションに適用されると仮定します。
最初のコード例では、(ラムダ式は、外側のスコープから撮影した変数の上にクロージャを紹介するので、これが起こっている - それについての詳細は、コードブロックの下を参照)あなたのコレクション内の各要素に対してcurrentPage
を増加しています。 2番目のコード例では、currentPage
が1回だけインクリメントされます。次のプログラムがどのように動作するかを見てみましょう:
class Program
{
static void Main(string[] args)
{
Func1();
Console.WriteLine("\n");
Func2();
Console.ReadKey();
}
private static void Func1()
{
int i = 0;
var list = new List<int> { 1, 2, 3 };
list.ForEach(x => Console.WriteLine(++i));
}
private static void Func2()
{
int i = 0;
int j = ++i;
var list = new List<int> { 1, 2, 3 };
list.ForEach(x => Console.WriteLine(j));
}
}
Hereは、ラムダ式で閉鎖についていくつかの詳細情報です。楽しむ! ;-)
これらは同等ではなく、簡単です。明らかにラムダは複数回評価されています(私は 'Find()'メソッドが何であるかわかりません)、現在のページのソート順を複数回変更しています。 –
照会に副作用のあるラムダ式は使用しないでください。 –