System.Predicate<T>:这真的是它的意思,还是它的用途?



MSDN是这样定义System.Predicate的:

表示定义一组标准并确定指定对象是否满足这些标准的方法。

这真的是它的意思吗,或者只是它的典型用途?因为对我来说,它看起来就像一个预定义的delegate,其方法必须取type Tobject并返回bool -仅此而已。

我错过了什么吗?

CLR不强制类型名的语义。

所以,是的,Predicate<T>只是一个委托采取T和返回bool,但它的意思是在一个谓词(一个特定条件的测试)预期的地方使用。这取决于程序员是否尊重这一惯例。如果您需要一个没有预定义语义的类似委托,您可以使用Func<T, bool>,例如。

对于编译器来说,Predicate<T>Func<T, bool>在功能上没有区别。但是对于另一个阅读你的代码的开发人员来说,它提供了一个重要的提示,告诉你你的代码应该做什么,前提是你正确地使用它。

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

这就是i 谓词的含义,这个术语是从谓词逻辑中借用来的。

那么当然可以使其他不是严格谓词的函数具有相同的函数签名。

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

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

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

相关内容

最新更新