System.Predicate <t>:这真的意味着什么,或者它是用于什么?</t>

时间:2011-07-20 06:57:39

标签: c# .net definition predicate

MSDN定义System.Predicate this way

  

表示定义一组条件并确定指定对象是否符合这些条件的方法。

这真的意味着什么,或者它通常用于什么?因为对我而言,它看起来像预定义的delegate,其方法必须object type T并返回bool - 仅此而已。

我错过了什么吗?

4 个答案:

答案 0 :(得分:10)

CLR不强制使用类型名称的语义。

所以是的,Predicate<T>只是一个委托T并返回bool,但它意味着用于谓词(某个条件的测试)的地方是期待。程序员应该尊重该惯例。如果您需要一个没有预定义语义含义的类似委托,您可以使用Func<T, bool>,例如。

对于编译器,Predicate<T>Func<T, bool>之间没有功能差异。但是对于另一个阅读代码的开发人员来说,只要您正确使用它,它就会提供一个关于代码应该做什么的重要提示。

同样,没有什么可以阻止我使用System.DayOfWeek存储1到7之间的任意值,而这个值实际上并不代表一周中的某一天。这将是一个愚蠢的事情,但编译器肯定会让我。由您来确保您的代码有意义,编译器不能为您做到这一点。

答案 1 :(得分:3)

这就是我谓词,这个词来自predicate logics

然后,当然可以使其他函数(不是严格谓词)具有相同的函数签名。

答案 2 :(得分:1)

您认为它是一个预定义的委托,但最常见的用法是在可扩展性方面确定方法调用之外是否满足条件。

现在很多人更喜欢使用Func<T,bool>而不是Predicate<T>,因为它在框架内更常用。

答案 3 :(得分:0)

我认为定义在特定用法中强制使用特殊原型,而委托可以用作任何函数,只有System.Predicate可以用于集合谓词函数(我会说它就像一个C ++指针函数原型)