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;
}
}
- 这是一个不带参数的lambda,但会产生
String
- 没有。
TDelegate
是一个模板参数。Func<T>
是满足TDelegate
约束的具体类型。C#编译器将在编译时将lambda转换为适当的类型 - 你应该测量一下以回答这个问题
()=>Name
是一个lambda函数。它基本上是一个返回Name
属性的函数。在您的情况下,这是一个Func<string>
类型。
所有这些都会发生一些变化,因为您将其交给一个定义为Expression<Func<T>>
的字段。在您的情况下,您给出Expression<Func<string>>
。基本上,这使lambda函数成为lambda函数的表达式,它不是给你函数的结果,而是给你结构。
通常,像这样的结构用于以安全的方式获取属性的名称。例如,为了防止混淆或意外重命名扰乱代码。