normalian blog

Let's talk about Microsoft Azure, ASP.NET and Java!

ラムダ式

ラムダ式はローカルスコープの変数値を保存していると聞いたので試してみた。コード例は以下。

public class LambdaFactory
{
    private static int x = 0;
    static public Func<int> Create()
    {
        //あえてここでローカル変数に代入
        int y = ++x;
        return () => y;
    }
}
class Program
{
    static void Main(string[] args)
    {
        Array.ForEach( Enumerable.Range(0,10).ToArray() , val =>
        {
            //ここでラムダ式実行で、帰ってくる値はLambdaFactory#Createのローカルスコープだが・・・
            Console.Write(LambdaFactory.Create()() + " ");
        });
        Console.ReadLine();
    }
}
//1 2 3 4 5 6 7 8 9 10

きれいに実行されている。うーん、この辺りはpythonjavascriptと一緒なのね。