【发布时间】:2016-06-12 09:37:53
【问题描述】:
我被困在一个只有一个 int 参数和一个 bool 返回值的 lambda 上:
Expression<Func<int, bool>> myFunc = x => x == 5;
首先,我尝试了返回一个我无法理解的新Func;我期待一个 true 布尔值:
var boolResult = Expression.Lambda(myFunc).Compile().DynamicInvoke(5);
然后我尝试显式设置函数参数和返回类型:
var param = Expression.Parameter(typeof(int), "x");
var fn = Expression.Lambda<Func<int, bool>> (myFunc, param).Compile();
,但这会引发错误:
System.ArgumentException : 类型表达式 'System.Func`2[System.Int32,System.Boolean]' 不能用于返回 输入“System.Boolean”
这很奇怪,但我试图转换表达式:
var fn = Expression.Lambda<Func<int, bool>> (
Expression.Convert(myFunc,
typeof(Func<int, bool>))
, param).Compile();
var boolResult = fn.Invoke(5);
,但这并没有帮助并给出相同的错误:
System.ArgumentException : 类型表达式 'System.Func`2[System.Int32,System.Boolean]' 不能用于返回 输入“System.Boolean”
知道我在这里做错了什么吗?
【问题讨论】:
-
你想用表达式去哪里?对于函数本身
Func<int, bool> myFunc = x => x == 5;就可以了。见 here 包括 cmets! -
@TaW 我正在从另一个我无法控制的库中获取表达式,所以很遗憾这不是我的选择。