5

我正在编写表达式扩展方法,该方法必须反转bool-typed lambda 表达式。

这是我正在做的事情:

public static Expression<Func<T, bool>> Inverse<T>(this Expression<Func<T, bool>> e)
{
    return Expression.Lambda<Func<T, bool>>(Expression.Not(e));
}

但这引发了一个例外,即unary operator is NOT not defined for the type 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));
}

但是得到这个:Incorrent number of parameters supplied for lambda declaration.

4

1 回答 1

18

幸运的是,这是通过这种方式解决的:

public static Expression<Func<T, bool>> Inverse<T>(this Expression<Func<T, bool>> e)
{
    return Expression.Lambda<Func<T, bool>>(Expression.Not(e.Body), e.Parameters[0]);
}

这表明该.Lambda<>方法需要一个参数,我们需要从源表达式中传递它。

于 2012-12-17T09:51:36.847 回答