C#2.0の匿名メソッドは直感的でない動作をするので、あちこちで議論になります。原因の1つにコンパイラがソースコードからは想像がつかないコードを生成していることが挙げられると思います。コンパイラがかなりのコードを生成していますが、大きく分けて3つのパターンあって、それらが分かると匿名メソッドを理解しやすくなります。 まずは、ソースコードとしては一番単純な(一番直感的では無い)例から。 using System; public class App { delegate void D (); public static void Main () { D[] ds = new D [10]; for (int i = 0; i < ds.Length; ++i) { ds [i] = delegate { Console.Write ("{0} ", i); }; } foreach (D d