LambdaExpression构造函数

Hel*_*lic 3 c# linq expression

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

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*ite 5

  1. 这是一个不带参数的lambda,但会产生一个String.
  2. 不是TDelegate模板参数.Func<T>是一种满足TDelegate约束条件的具体类型.C#编译器将在编译时将lambda转换为适当的类型.
  3. 你应该测量以回答这个问题.