是否可以在没有参数的情况下重写此扩展方法?
public static string PropertyName<T>(this T obj, Expression<Func<T>> property)
{
var memberExpression = property.Body as MemberExpression;
if (memberExpression == null)
throw new ArgumentException("Expression must be a MemberExpression.", "property");
return memberExpression.Member.Name;
}
这是该功能的测试代码。
string TEST = Guid.NewGuid().ToString();
string propertyName = TEST.PropertyName(() => TEST);
结果如下:
propertyName = "TEST"
我想重写代码:
string propertyName = TEST.PropertyName();
聚苯乙烯。我对这种方法的静态版本不感兴趣!
对于那些如何看不出这个功能的重点。 在MVVM模式中,您已为属性更改了通知。 像这样。
this.RaisePropertyChanged("TEST");
这是一个糟糕的方法,因为属性名称是硬编码的。 借助扩展方法,您将拥有:
this.RaisePropertyChanged(()=>Test);
我想将扩展方法重写为:
this.RaisePropertyChanged(Test.PropertyName());
以下是我的MVVM项目的代码示例。 (这是一个Model属性)
public DateTime Start
{
get { return WorkModel.Start; }
set
{
if (WorkModel.Start != value)
{
WorkModel.Start = new DateTime(SelectedDate.Year, SelectedDate.Month, SelectedDate.Day, value.Hour, value.Minute, value.Second);
this.RaisePropertyChanged("Start");
this.RaisePropertyChanged("TotalWork");
}
}
}
答案 0 :(得分:1)
不,这是不可能的。本地变量名仅适用于编译器,不会记录或在编译期间可以重命名。
当然属性是不同的东西。你应该知道你的第一个例子与你的第二个例子不同。
尽管如此,我还没有看到你可以实现这一点的方法。即使这样,它也会比你的work()=&gt; PropertyName类型的调用具有更大的性能杀手。