首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何反演System.Predicate<T>

如何反演System.Predicate<T>
EN

Stack Overflow用户
提问于 2015-06-25 13:27:10
回答 2查看 395关注 0票数 3

假设我有一个Predicate<T>,我想用上述谓词返回true调用foo方法,我想用返回false的谓词调用方法栏,我如何做到这一点:

代码语言:javascript
复制
Predicate<int> p = i => i > 0
foo(p);
bar(!p); // obviously this doesn't work

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-25 13:29:34

您可以轻松地创建一个返回“倒排”谓词的方法--甚至可以将其作为扩展方法:

代码语言:javascript
复制
public static Predicate<T> Invert<T>(this Predicate<T> predicate)
{
    // TODO: Nullity checking
    return x => !predicate(x);
}

然后:

代码语言:javascript
复制
bar(p.Invert());

基本上,这正是如果您有一个Func<int, bool>就会做的事情--这些委托类型中的任何一个都没有“魔力”。

票数 7
EN

Stack Overflow用户

发布于 2015-06-25 13:35:25

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

代码语言:javascript
复制
bar(x => !p(x));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31051724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档