我有一个类似于Caliburn.Micro
的函数:
// using Caliburn.Micro;
public void ChangeProperty<T>(Expression<Func<T>> property, ref T propertyRef, T newValue)
{
string propertyName = property.GetMemberInfo().Name;
T oldValue = propertyRef;
propertyRef = newValue;
PropertyChangeEx(this, propertyName, oldValue, newValue); // change event
}
我这样用它:
public Property
{
get { return property; }
set { ChangeProperty(() => Property, ref property, value); }
}
并且它工作正常 - 我不需要将属性名称作为字符串传递,因此我可以自由更改Property的名称。
但如果我可以改变我的电话会很好:
ChangeProperty(() => Property, ref property, value);
类似于:
ChangeProperty(Property => property = value);
或任何看起来更好的东西。
有没有人有想法?
答案 0 :(得分:1)
您可以执行类似
的操作ChangeProperty(()=>Property, value);
在里面,您可以使用名称约定从属性名称获取字段名称,然后使用反射来设置此字段。但反思可能会影响性能,名称约定可能会改变。此外,在低信任环境中,您不能使用反射来操纵私有字段。
答案 1 :(得分:1)
查看CallerMemberNameAttribure,它允许在不传递属性名称的情况下轻松实现OnPropertyChanged。 http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.callermembernameattribute.aspx