假设我有一个 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)
最佳答案
您可以轻松创建一个方法来返回“反向”谓词 - 您甚至可以将其设为扩展方法:
public static Predicate<T> Invert<T>(this Predicate<T> predicate)
{
// TODO: Nullity checking
return x => !predicate(x);
}
然后:
bar(p.Invert());
基本上,如果您有
Func<int, bool>
,这正是您会做的事情 - 这些委托(delegate)类型中的任何一种都没有“魔法”。关于c# - 如何反转 System.Predicate<T>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31051724/