5

bool型指定されたラムダ式を反転する必要がある式拡張メソッドを作成しています。

これが私がやっていることです:

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 に答える