使用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/

10-13 09:29