リフレクション、コンポーネントモデルタイプ記述子、式ツリー、アスペクトなど、これを行うさまざまな方法を見てきましたが、以下のコードが.Net4.0以降を使用して次のすべての目的を達成するかどうかはまだわかりません。
- タイプセーフで、リファクタリングに対応し(マジックストリングなし)、読みやすい
- 複数の呼び出しでパフォーマンスを最大化
- プロパティの名前を入力してください
- プロパティの値を提供します
コードをどのように改善できますか?
protected void NotifyOfPropertyChanging<TProperty>(Expression<Func<TProperty>> property) {
var memberExpression = (MemberExpression)property.Body;
var prop = (PropertyInfo) memberExpression.Member;
var propertyName = prop.Name;
var value = prop.GetValue(this, null);
// fire INPC using propertyName
// use value and name to do IsDirty checking
}