バージョン 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
成功したのか