【发布时间】:2012-09-05 12:26:56
【问题描述】:
我决定花一些黄金时间来学习更多关于表达式的知识。我正在尝试一个非常简单的练习,即添加两个数字。我遇到了一个很难搜索的异常。
这是我的代码
Expression<Func<int,int,int>> addExpr = (x, y) => x + y;
var p1 = Expression.Parameter(typeof(int), "p1");
var p2 = Expression.Parameter(typeof(int), "p2");
var lambda = Expression.Lambda<Func<int,int,int>>(addExpr, p1, p2); //<-here
var del = lambda.Compile();
var result = del(2,3); //expect 5
但这会引发 ArgumentException:'System.Func`3[System.Int32,System.Int32,System.Int32]' 类型的表达式不能用于返回类型 'System.Int32'
在上面指出的那一行。我做错了什么?
【问题讨论】:
-
你想在这段代码中做什么?您是否尝试仅使用表达式构建 (x,y) => x + y lambda?
-
只是随便看看。最终目标是编写一个倒计时数字游戏求解器的练习。 en.wikipedia.org/wiki/Countdown_%28game_show%29#Numbers_round 在我看来,表达式树是解决这个问题的好方法,但对我来说,这一切都是非常新的和闪亮的 ATM。
标签: c# expression argumentexception