rksoftware

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

C# 8 の確認 - 静的ローカル関数

今回は 静的ローカル関数 。これは使わないと何がどうしようもないという仕様ではないですが、あってうれしい仕様です。必要に迫られないので、しっかり覚えて意識して使っていきましょう。

公式はこちら

このブログでの目次?はこちら

静的でないローカル関数では

こんなことができます。x がキャプチャされています。

int x = 0;
localFunction(x);
Console.WriteLine(x);

int localFunction(int y) => ++x;

静的ローカル関数では

x がキャプチャできません。次のコードはコンパイルエラーになります。

int x = 0;
localFunction(x);
Console.WriteLine(x);

static int localFunction(int y) => ++x;

エラー CS8421 静的なローカル関数に 'x' への参照を含めることはできません。

static メソッドを同様に内部で使いたければ、引数として与えてやる必要があります。

int x = 0;
x = localFunction(x);
Console.WriteLine(x);

static int localFunction(int y) => ++y;

引数で与えた値だけに依存して結果が決定される関数というのはとてもいいものだと思うので、それば明確にできるこの仕様はなるべく使うようにして良いのではないかなと思います。