rksoftware

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

C# 9.0 の確認「静的な匿名関数」

C# 9.0 の確認の目次はこちら

■ 静的な匿名関数

ドキュメントはこちら

適合性と完成度の機能 という項目の割と読み進めた所の 「C# 9.0 以降では、」 から始まるブロックです。
名前の通りにラムダ式と匿名関数に static 修飾子をつけられるようになりました。シンプルなのでドキュメントに書いてあることしか言えませんね。

公式ドキュメントだけで十分という気がしますが試してみましょう。

■ 検証コードと結果

■ ラムダ式

冷静に見ないと一瞬わからなくなるかもしれませんが、こんな感じです。

new[] { 0 }.Select(static x => x);

static なので外部の変数をキャプチャできません。素晴らしいですね。

var i = 0;
new[] { 0 }.Select(static x => x + i); // これはエラー

変数 i はラムダ式の外の変数なのでエラーになります。

■ 匿名関数

匿名関数とか 10,000 年ぶりに書いた気がします。

new[] { 0 }.Select(static delegate (int x) { return x; });

static なので外部の変数をキャプチャできません。素晴らしいですね。

var i = 0;
new[] { 0 }.Select(static delegate (int x) { return x + i; }); // これはエラー

変数 i は匿名関数の外の変数なのでエラーになります。

■ まとめ

変数キャプチャができなくなるのはうれしいですね。積極的に使っていきましょう