我正在编写表达式扩展方法,必须反转bool
类型的lambda表达式。
这是我的做法:
public static Expression<Func<T, bool>> Inverse<T>(this Expression<Func<T, bool>> e)
{
return Expression.Lambda<Func<T, bool>>(Expression.Not(e));
}
但这引发了一个异常,即类型为 Func<int,bool>
的一元运算符非未定义。
我还尝试了这个:
public static Expression<Func<T, bool>> Inverse<T>(this Expression<Func<T, bool>> e)
{
return Expression.Lambda<Func<T, bool>>(Expression.Not(e.Body));
}
但是你可能会得到这个错误:
为lambda声明提供了不正确的参数数量
。
null
吧?就像当你执行Method.Invoke
时一样,我只是好奇这是否成立。 - LukeHennerleyFunc<T, bool>
,其中T
是参数。传递null将导致提取该null,而不是引发IndexOutOfBounds
或任何其他异常。 - AgentFire