rksoftware

Visual Studio とか C# とかが好きです

C# 2.0 以降の新機能の確認 - C# 7.0 - ローカル関数 (Local functions)

C# 2.0 以降の新機能を一つづつ確認していきます。
以前に一度行ったのですが、公式ドキュメント再編でリンク切れしているところを見つけてしまったので。今ならもっと簡潔なサンプルが欠けるところもあるだろうし、せっかくなので今もう一度確認して行きます。

ローカル関数 (Local functions)

 https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/classes-and-structs/local-functions
 メソッド内でメソッドを定義できる。

class LocalFunctionSample
{
    void NewStyle()
    {   // ローカル関数
        // 関数呼び出し
        func(0);
        // 呼び出しより後方に書ける
        void func(int v)
        {
            Console.WriteLine(++v);
            if (v < 3)
            {
                // 自分自身を再起呼び出しできる
                func(v);
            }
        }
    }

    void OldStyle()
    {   // 以前のスタイル
        // 自分自身を再起呼び出しできないので、変数が必要
        Action<int> func = null;
        // 変数に関数を代入
        func = v =>
        {
            Console.WriteLine(++v);
            if (v < 3)
            {
            // 変数で関数を再起呼び出し
            func(v);
            }
        };
        // 呼び出しより前方で関数を書く必要がある
        // 関数呼び出し
        func(0);
    }
}