我看到了如下代码。我的问题是:
1> ()=>Name
这是什么意思?
2> 是 Expression<Func<>>
与Expression<TDelegate>
相同? ()=>Name
如何转换为 Expression<Func<>>
使用哪个构造函数?大多数 Expression 类没有公共(public)构造函数。 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 转换为适当的类型。 - 您应该测量才能回答这个问题。
关于c# - LambdaExpression 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31208336/