1

最近、私はPredicateBuilderクラス(ここに表示)を使用して、式ツリーの生成を支援しています。提供されているTrue、And、およびOrメソッドは正常に機能します。ただし、Notメソッドも使用したいので、これまでのところ、1つにしようとするとエラーが発生します。

Incorrect number of parameters supplied for lambda declaration.

ここにその試みがあります:

    public static Expression<Func<T, bool>> Not<T>(this Expression<Func<T, bool>> expr)
    {
        return Expression.Lambda<Func<T, bool>>
            (Expression.Not(Expression.Invoke(expr, expr.Parameters.Cast<Expression>())));
    }

何かご意見は?
NB

4

1 に答える 1

1

おっと、ちょうどそれを持っていました。外側の .Lambda 関数にパラメーターを与えていませんでした:

    public static Expression<Func<T, bool>> Not<T>(this Expression<Func<T, bool>> expr)
    {
        return Expression.Lambda<Func<T, bool>>
            (Expression.Not(Expression.Invoke(expr, expr.Parameters.Cast<Expression>())), expr.Parameters);
    }
于 2012-12-04T14:52:00.883 に答える