假设我有一个Predicate<T>,我想用上述谓词返回true调用foo方法,我想用返回false的谓词调用方法栏,我如何做到这一点:
Predicate<int> p = i => i > 0
foo(p);
bar(!p); // obviously this doesn't work如果谓词是Func<int, bool> f,我可以只使用!f(i)
发布于 2015-06-25 13:29:34
您可以轻松地创建一个返回“倒排”谓词的方法--甚至可以将其作为扩展方法:
public static Predicate<T> Invert<T>(this Predicate<T> predicate)
{
// TODO: Nullity checking
return x => !predicate(x);
}然后:
bar(p.Invert());基本上,这正是如果您有一个Func<int, bool>就会做的事情--这些委托类型中的任何一个都没有“魔力”。
发布于 2015-06-25 13:35:25
您可以将谓词包装在lambda中。
bar(x => !p(x));https://stackoverflow.com/questions/31051724
复制相似问题