【发布时间】:2010-07-08 15:38:57
【问题描述】:
我无法让这个 API 在 .net 3.5 中运行(在 4.0 中运行良好)。基本上我有以下代码
List<ParameterExpression> parameters = new List<ParameterExpression>();
parameters.Add(Expression.Parameter(typeof(double), "R0C6"));
parameters.Add(Expression.Parameter(typeof(double), "R0C7"));
parameters.Add(Expression.Parameter(typeof(double), "R0C8"));
parameters.Add(Expression.Parameter(typeof(double), "R0C9"));
parameters.Add(Expression.Parameter(typeof(double), "R0C10"));
parameters.Add(Expression.Parameter(typeof(double), "R0C11"));
parameters.Add(Expression.Parameter(typeof(double), "R0C12"));
LambdaExpression e = DynamicExpressionBuilder.ParseLambda(
parameters.ToArray(), typeof(double), "R0C6 + R0C7 + R0C8 + R0C9 + R0C10 + R0C11 + R0C12");
var result = e.Compile().DynamicInvoke(1, 1, 1, 1, 1, 1, 1);
Console.WriteLine(result);
运行此代码时,我得到 ArgumentException。原因是 .NET 3.5 没有具有 4 个以上参数的 Func 委托。有人可以建议我更改 Dynamic.cs 以便我可以在 3.5 中运行代码吗?
【问题讨论】:
-
你能解释一下 DynamicExpressionBuilder 对参数做了什么吗?我在下面的回答假设您有一组静态参数,但在再次阅读后,我发现实际上您可能正在处理未知数量的参数。
-
DynamicExpressionBuilder 只是 Dynamic.cs 文件中类 DynamicExpression 的重命名版本。我刚刚更改了名称,以便可以区分 system.linq.expression 命名空间中的类 DynamicExpression。
标签: linq dynamic tree lambda expression