在 expressions
上使用 nameof
来提取属性名称是个好主意吗?
//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/