c# - 表达式与 nameof

标签 c# .net expression c#-6.0 nameof

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/

相关文章:

c# - RedisSessionStateProvider 与 ProtoBuf 序列化导致错误

C# ASCII GetBytes如何设置使用哪个字符进行无法识别的转换?

c# - ASP.NET MVC 3 - 在 View 中处理模型的最佳实践

c# - 从其用户控件调用 Windows 窗体方法

c# - 删除字符串中的空格

C# 列表中的最小差异

c# - mvc 添加查询字符串变量

c# - "Object Expression"是否像 F# 一样存在于 C# 中?

javascript - 如何使用 Extendscript 和 javascript 将 After Effects 中的表达式添加到图层或合成中?

Python:快捷条件表达式