まぐらぼ

日々の雑記を書いています。

ラムダ式とデリゲートと匿名メソッドの違い

自分用メモ:ラムダ式とデリゲートと匿名メソッドの違い

delegate void myfunc(int a, Array va);
static void test_func(int i, Array va)
{
Debug.WriteLine("{0}", va.GetValue(i).ToString());
}
private static void IO()
{
using (WebClient client = new WebClient())
{
    int max = 2;
    Array va = Enumerable.Repeat("http://weblogs.asp.net/dixin", max).Select(client.DownloadString).ToArray();
    // ラムダ式
    if ( false) {
        myfunc myf = (i, a) =>
        {
            //ステートメント形式のラムダ
            Debug.WriteLine("{0}", a.GetValue(i).ToString());
        };//セミコロン必須
        
        for (int i = 0; i < max; i++) {
            myf(i, va);//キック
        }
    }

    // デリゲート
    if ( false ) {
        myfunc myf = test_func;

        for (int i = 0; i < max; i++)
        {
            myf(i, va);//キック
        }
    }

    {
        //匿名メソッド
        myfunc myf = delegate(int i, Array a)
        {
            Debug.WriteLine("{0}", a.GetValue(i).ToString());
        };

        for (int i = 0; i < max; i++)
        {
            myf(i, va);//キック
        }
    }
}
}