我想通过反射机制获取属性名称.可能吗?
更新:我有这样的代码:
public CarType Car
{
get { return (Wheel) this["Wheel"];}
set { this["Wheel"] = value; }
}
Run Code Online (Sandbox Code Playgroud)
因为我需要更多这样的属性,我想做这样的事情:
public CarType Car
{
get { return (Wheel) this[GetThisPropertyName()];}
set { this[GetThisPropertyName()] = value; }
}
Run Code Online (Sandbox Code Playgroud) 我正在研究一个庞大的团队应用程序,该应用程序正在以大量使用魔术字符串的形式NotifyPropertyChanged("PropertyName")- 在咨询Microsoft时的标准实现.我们还遭受了大量错误命名的属性(使用具有数百个存储的计算属性的计算模块的对象模型) - 所有这些属性都绑定到UI.
我的团队经历了许多与属性名称更改相关的错误,导致错误的魔术字符串和破坏绑定.我希望通过实现属性更改通知而不使用魔术字符串来解决问题.我发现.Net 3.5的唯一解决方案涉及lambda表达式.(例如:实现INotifyPropertyChanged - 是否存在更好的方法?)
我的经理非常担心转换的性能成本
set { ... OnPropertyChanged("PropertyName"); }
Run Code Online (Sandbox Code Playgroud)
至
set { ... OnPropertyChanged(() => PropertyName); }
Run Code Online (Sandbox Code Playgroud)
提取名称的位置
protected virtual void OnPropertyChanged<T>(Expression<Func<T>> selectorExpression)
{
MemberExpression body = selectorExpression.Body as MemberExpression;
if (body == null) throw new ArgumentException("The body must be a member expression");
OnPropertyChanged(body.Member.Name);
}
Run Code Online (Sandbox Code Playgroud)
考虑像电子表格这样的应用程序,当参数发生变化时,会在UI上实时重新计算和更新大约一百个值.是否会使此更改变得如此昂贵以至于会影响UI的响应能力?我现在甚至无法证明测试此更改的合理性,因为在各种项目和类中更新属性设置器需要大约2天.