nameof演算子

これまでC# vNextの新機能についていくつか紹介してきましたが、個人的にラムダ形式プロパティよりも、null伝搬演算子よりも、catch/finally句で利用できるawait演算子よりもずっと ×2 興奮したのが今回取り上げるnameof演算子 (nameof operator) です。簡単に言うと、変数名や関数名などをサクッと取得するためのキーワードです。

とりあえず使ってみる

nameof演算子の利用方法は以下のような感じです。このように、非常にカジュアルに利用することができます。

この機能により、これまで文字列ベタ書きに甘んじていた多くのコードがタイプセーフになります!PropertyInfoなどのリフレクションを駆使したコードや、Expressionを使ったコードがいくらか減る予感。超ハッピー!

以下にいくつかの例を載せてみました。他にもJSONの作成 (もはや自力の生成はほぼないとは思うけど) やデバッグメッセージの生成など、有効に使えるシチュエーション結構多いのではないかと思います。Visual Studio 14 CTP 3から利用できますので、ぜひ試してみてください!

例 1 : 引数チェック時の例外文字列

コンストラクタやメソッドでの引数チェックは頻繁に行われます。このとき、検証エラーが発生した場合にはエラーが出た引数名を文字列として例外クラスに渡すのが基本でした。引数名を変更する際に処理を忘れるというのはたまにやってしまうミスですが、これからはそんな問題も起こらなくなるでしょう。


例 2 : INotifyPropertyChanged

WPFやWindows Phone、WindowsストアアプリなどのXAMLアプリケーションを開発する際の重要な機構のひとつにデータバインディングがあります。特にINotifyPropertyChangedはその機構を支える重要なインターフェースですが、その実装は「変更されたプロパティの名前をイベント引数としつつ、イベントを発行する」なので、プロパティ名を文字列でベタ書きするか、ExpressionやCallerMemberName属性などを利用して取得していました。今回nameof演算子のおかげで少しだけ直観的になった気がします。


例 3 : 依存関係プロパティ

その他、同じくXAMLアプリケーションで重要な依存関係プロパティにもプロパティ名を文字列で指定する箇所があります。こういったところでもタイプセーフを実現することができるようになります。

Posted in Series and tagged .