我已经看到了执行此操作的各种方法,包括反射、组件模型类型描述符、表达式树和方面,但我仍然不确定下面的代码是否使用 .Net 4.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
}