LambdaExpression构造函数

本文关键字:构造函数 LambdaExpression | 更新日期: 2023-09-27 18:01:07

我看到了如下代码。我的问题是:

1> ()=>Name这意味着什么?

2> Expression<Func<>>Expression<TDelegate>相同吗?()=>Name是如何转换为Expression<Func<>>的?使用了哪个构造函数?大多数Expression类没有公共构造函数。C#编译器如何从Lambda转换为Expression?

3> Parse函数的性能成本是多少?

public class Test
{
    public string Name {get;set;}
    public void Start()
    {
        Parse(()=>Name);
    }
    public string Parse<T>(Expression<Func<T>> exp)
    {
        var mexp = (System.Linq.Expressions.MemberExpression)expression.Body;
        return mexp == null ? "" : mexp.Member.Name;
    }
}

LambdaExpression构造函数

  1. 这是一个不带参数的lambda,但会产生String
  2. 没有。TDelegate是一个模板参数。Func<T>是满足TDelegate约束的具体类型。C#编译器将在编译时将lambda转换为适当的类型
  3. 你应该测量一下以回答这个问题
所以()=>Name是一个lambda函数。它基本上是一个返回Name属性的函数。在您的情况下,这是一个Func<string>类型。

所有这些都会发生一些变化,因为您将其交给一个定义为Expression<Func<T>>的字段。在您的情况下,您给出Expression<Func<string>>。基本上,这使lambda函数成为lambda函数的表达式,它不是给你函数的结果,而是给你结构。

通常,像这样的结构用于以安全的方式获取属性的名称。例如,为了防止混淆或意外重命名扰乱代码。