使用nameof
而不是expressions
提取属性名称是一个好主意吗?
//method with expression
protected void RaisePropertyChanged<T>(Expression<Func<T>> propertyExpression, bool isValid, [param: Localizable(true)] string validationError)
{
string propertyName = PropertySupport.ExtractPropertyName(propertyExpression);
RaisePropertyChanged(propertyName, isValid, validationError);
}
//the same logic without expression
protected void RaisePropertyChanged(string propertyName, [param: Localizable(true)] string validationError)
{
RaisePropertyChanged(propertyName, validationError == null, validationError);
}
但是电话是不同的
public string Url
{
set
{
//with nameof
RaisePropertyChanged(nameof(Url), this.GetValidationError());
//with expression
RaisePropertyChanged(() => Url, this.GetValidationError());
}
}
您在每种方法中都知道哪些优点和缺点?还是只有执行速度很重要?我的意思是,编译后
nameof
值将替换为const
值。 最佳答案
为什么要使用表达式执行在编译时可以执行的操作? nameof(Url)
是在编译时确定的。花费0毫秒。然后进行评估。当您可以使用nameof
时,构建表达式既昂贵又毫无意义。
因此,最重要的是:除非确实需要,否则不要使用表达式(您已经在表达式内部工作,必须从那里开始)。否则,请使用nameof
。
关于c# - 表达式与nameof,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38324208/