どうも、ぺやんぐ(@peyangu485)です。
nameof演算子は便利だねってお話。
◆目的
C# 5.0以下の環境でnameof演算子と似たようなものを実装する。
改めてnameof演算子っていいよねって気付く。
◆経緯
WPFの実装中、
と文字列でNotifyPropertyChangedに引数を渡しています。
これ、プロパティ名を変更しても文字列は変更対象にならないので、ここの変更忘れが原因で動かなくなるってことが起きるんですよね。
まぁ、そこまで気づきにくい場所でもないのですがちょっと鬱陶しいですね。
◆登場! nameof演算子!
とか思っていると、C#6.0でnameof演算子が追加され、以下のように書くことができるようになりました。
nameof(プロパティ名))
たったこれだけの記述にするだけで変更がかかるようになり、つまらないミスをなくすことができるんですね。
これは素晴らしい。
いや、ほんと。
ですが、C#6.0の環境じゃないと使えない。
会社の環境によって使えるときと使えないときがあるんですよね。
「まぁ、その時は文字列でいいんじゃない?」って思ってしまいますがあえてnameof演算子と似たようなことができるようにがんばりましょう。
◆実装
以下、コード
今回使用するメソッドの定義
WPFでの使用例
起動時はこちら
ボタン押下で
きちんと変更通知がわたっているので、文字列が表示されていますね。
◆まとめ
さすがにnameof演算子ほど短く、とは言えないですがそこそこいいんじゃないかと。
短くしたい場合は、クラス名とメソッド名をもっと簡略化すればいいかな。
どちらでも使えるようにしておきましょー。
追記
C# 5.0限定ですが、CallerMemberNameでも取得できるそうです!
参考:
C# 5.0 の新機能 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C
[ VB.NET / C# ] 呼び出し元のメソッド名, ファイル名, 行番号を取得する ( .Net Framework4.5 以降 ) – 行け!偏差値40プログラマー