rksoftware

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

C# 11 の新機能を確認「拡張 nameof スコープ」

C# 11 の新機能を確認しています。目次は次の記事です。
rksoftware.hatenablog.com

今回は 「 拡張 nameof スコープ 」。公式 Learn の記事は次です。

メソッドに付ける属性で、そのメソッドのパラメータ名で nameof できます。

■ 確認

次のようなコードが書けます。

[return: System.Diagnostics.CodeAnalysis.NotNullIfNotNull(nameof(arg))]
string? Method(string? arg) => arg;

他にも、引数の名前を受け取るメソッドの属性があれば使えますが、↑ の例の属性以外でどれほど使う機会があるか。メソッドのパラメータを属性で修飾するときは、パラメータに属性を付けることが多いですし。次のように。

Method(null);  // 警告 CS8625 null リテラルを null 非許容参照型に変換できません。

string? Method([System.Diagnostics.CodeAnalysis.DisallowNullAttribute] string? arg) => arg;

でも、実際必要な場面に出会ったら、新機能として覚えていなくても普通に書いて使っていきそうです。

■ 必要な時、自然に書くと思います

この新機能は覚えておかなくても、必要な場面では自然に書いているとおもいます。大丈夫です。安心してください。