nameof の目的は何ですか? 質問する

nameof の目的は何ですか? 質問する

バージョン 6.0 には という新しい機能が追加されましたnameofが、変数名を取得してコンパイル時に文字列に変更するだけなので、その目的がわかりません。

使用時に何らかの目的があるかもしれないと思いましたが、使用しよ<T>うとすると、使用されたタイプではなく、nameof(T)単に a が印刷されます。T

目的は何か分かりますか?

ベストアンサー1

プロパティ名に基づいて例外をスローする場合や、イベントを処理する場合など、プロパティ名を再利用したい場合はどうでしょうか。PropertyChangedプロパティ名が必要になるケースは数多くあります。

次の例を見てみましょう。

switch (e.PropertyName)
{
    case nameof(SomeProperty):
    { break; }

    // opposed to
    case "SomeOtherProperty":
    { break; }
}

最初のケースでは、SomePropertyプロパティ定義と式の両方を変更しないと、名前を変更するとコンパイル エラーが発生しますnameof(SomeProperty)。 2 番目のケースでは、名前の変更SomeOtherPropertyまたは"SomeOtherProperty"文字列の変更により、ビルド時にエラーや警告が表示されず、実行時の動作が暗黙的に壊れます。

これは、コードをコンパイルしてバグのない状態に保つ(ある程度)ための非常に便利な方法です。

(Aエリック・リッパートによる素晴らしい記事なぜinfoof成功しなかったのか、なぜnameof成功したのか

おすすめ記事