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

IDE@Plex

C#,WPFやXamarinでのアプリ開発備忘録

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

C# 技術

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

◆経緯

WPFアプリの実装中、

NotifyPropertyChangedに文字列の引数

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

◆登場! nameof演算子

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

nameof演算子

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

これは素晴らしい。 いや、ほんと。

だけど、C#6.0の環境じゃないと使えない。
会社の環境によって使えるときと使えないときがある……。
「まぁ、その時は文字列でいいんじゃない?」って思ってしまうけど、あえてnameof演算子と似たようなことができるようにがんばる。

◆目的

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

◆実装

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

プロパティ名の取得

WPFでの使用例

GetPropertyNameメソッドの呼び出し

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

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

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

◆まとめ

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

どちらでも使えるようにしておきましょー。
まぁ、今後の開発は6.0以降を使うとは思うので、こういうものの出る幕はあまりないのだろうけど。

※2017/3/15 記事をリライト。