如何反转系统.谓词<;T>;

本文关键字:gt 何反转 lt 谓词 系统 | 更新日期: 2023-09-27 17:59:54

假设我有一个Predicate<T>,我想用返回true的谓词调用方法foo,用返回false的谓词调用方式bar,我该怎么做:

Predicate<int> p = i => i > 0
foo(p);
bar(!p); // obviously this doesn't work

如果谓词是Func<int, bool> f,我可以只使用!f(i)

如何反转系统.谓词<;T>;

您可以轻松创建一个方法来返回"反转"谓词,甚至可以将其作为扩展方法:

public static Predicate<T> Invert<T>(this Predicate<T> predicate)
{
    // TODO: Nullity checking
    return x => !predicate(x);
}

然后:

bar(p.Invert());

基本上,这正是如果你有一个Func<int, bool>,你会做的事情——这两种委托类型都没有什么"魔力"。

您可以将谓词包装在lambda中。

bar(x => !p(x));