読者です 読者をやめる 読者になる 読者になる

ぺやろぐ

ゲームと奈々ちゃんと時々プログラミング

〔C#〕 nameof演算子が使えないけど、似たようなことをする(プロパティ名の取得)

どうも、ぺやんぐ(@peyangu485)です。

nameof演算子は便利だねってお話。


◆目的

C# 5.0以下の環境でnameof演算子と似たようなものを実装する。
改めてnameof演算子っていいよねって気付く。


◆経緯

WPFの実装中、


NotifyPropertyChangedに文字列の引数


と文字列でNotifyPropertyChangedに引数を渡しています。
これ、プロパティ名を変更しても文字列は変更対象にならないので、ここの変更忘れが原因で動かなくなるってことが起きるんですよね。
まぁ、そこまで気づきにくい場所でもないのですがちょっと鬱陶しいですね。


◆登場! nameof演算子!

とか思っていると、C#6.0でnameof演算子が追加され、以下のように書くことができるようになりました。


nameof演算子


nameof(プロパティ名))
たったこれだけの記述にするだけで変更がかかるようになり、つまらないミスをなくすことができるんですね。

これは素晴らしい。

いや、ほんと。

ですが、C#6.0の環境じゃないと使えない。

会社の環境によって使えるときと使えないときがあるんですよね。

「まぁ、その時は文字列でいいんじゃない?」って思ってしまいますがあえてnameof演算子と似たようなことができるようにがんばりましょう。


◆実装

以下、コード

今回使用するメソッドの定義


プロパティ名の取得


WPFでの使用例


GetPropertyNameメソッドの呼び出し


起動時はこちら
f:id:peyangu485:20160124185218p:plain

ボタン押下で
f:id:peyangu485:20160124185223p:plain

きちんと変更通知がわたっているので、文字列が表示されていますね。


◆まとめ

さすがにnameof演算子ほど短く、とは言えないですがそこそこいいんじゃないかと。
短くしたい場合は、クラス名とメソッド名をもっと簡略化すればいいかな。

どちらでも使えるようにしておきましょー。