【发布时间】:2014-11-18 16:40:45
【问题描述】:
我知道我可以使用以下方法创建表达式树:
工厂方法。
编译器将 lambda 表达式转换为
Expression。
对于复杂的表达式树,我更喜欢 2,因为它更简洁。
这样可以引用已经构建好的Expressions吗?
using System;
using System.Linq.Expressions;
public class Test
{
public static Expression<Func<int, int>> Add(Expression expr)
{
#if false
// works
ParameterExpression i = Expression.Parameter(typeof(int));
return Expression.Lambda<Func<int, int>>(Expression.Add(i, expr), i);
#else
// compiler error, can I pass expr here somehow?
return i => i + expr;
#endif
}
public static void Main()
{
Func<int, int> f = Add(Expression.Constant(42)).Compile();
Console.WriteLine(f(1));
}
}
【问题讨论】:
-
我认为您只需要在从 Expression 到 Expression
的添加中指定表达式的类型,因为我认为这就是上面示例中发生的情况,但它是推断出来的。