この章のテーマ §
nameof式について学びます。
前提知識 §
Console.WriteLineメソッド, 文字列の基礎, 変数の基礎, int型, byte型
解説 §
nameof式は、nameof(名前)と書き、その名前を文字列として得ます。
たとえば変数aがあると、nameof(a)は"a"となります。
そのような機能にどんなメリットがあるのかと言えば、CTRL+R, Rキーによる名前変更などを行うとその名前も確実に変更されます。単に文字列として書いておくと変更されません。
たとえば、サンプルソースのConsole.WriteLine($"{nameof(sample)}の値は{sample}です。");のような行は、変数名がどう書き換えられても常に正しい対応関係を保ちます。
ソースコードはどんどん書き換えられていくものだと思うと、地味ですが割と便利です。
罠の数々 §
- サンプルソースのbyte.MaxValueのようなドット区切りの場合は最後の項目の名前だけを扱う。つまり、これは"MaxValue"という文字列になる
- @変数名のように、エスケープされた名前の場合、エスケープ文字@は除外した名前の文字列が得られる
参考リンク §
nameof 式 (C# リファレンス)
サンプルソース: kw_nameof §
var sample = 123;
Console.WriteLine($"{nameof(sample)}の値は{sample}です。");
Console.WriteLine($"{nameof(byte.MaxValue)}の値は{byte.MaxValue}です。");
実行結果 §
sampleの値は123です。
MaxValueの値は255です。
リポジトリ §
https://github.com/autumn009/CSharpPrimer2
練習問題 §
以下のプログラムの実行結果を予測してみよう。
Console.WriteLine(nameof(123));
- 何も出力しない
- 123
- "123"
- コンパイルエラー
- 実行時例外
[[解答]]