はじめに
今回はC#9.0から導入された静的匿名関数(Static anonymous functions
)について取り上げたいと思います。
learn.microsoft.com
概要
ラムダおよび匿名メソッドに対して ' static ' 修飾子を許可します。これにより、含まれるスコープからのローカルまたはインスタンスの状態のキャプチャが禁止されます。
Static anonymous functions - C# 9.0 specification proposals | Microsoft Learn
static
をつけることで何か新しいことができるというわけではなく、匿名関数が状態をキャプチャをしないことを明示的に強制することができます。
private static int _staticNum = 0; private int _num = 1; private void Start() { var a = 0; // aをキャプチャしてしまうのでコンパイルエラー Func<int, int> func = static x => a * x; // _numをキャプチャしてしまうのでコンパイルエラー Func<int, int> func2 = static x => _num * x; // 純粋関数になっているのでOK Func<int, int> func3 = static x => x * x; // static変数はOK Func<int, int> func4 = static x => x * _staticNum; }
すごい便利だと思います。