委托Action,Func,Predicate是平时开发中使用的较多的系统预定义委托。
三者均位于.Net类库的System 命名空间下。
本文将对三者中的Predicate 泛型委托进行介绍,希望能为那些对此感兴趣的读者带来一定的帮助。
一开始,我们还是来看一个Predicate泛型委托的小例子,代码如下:
Predicate<string> printPredicate = delegate(string input) { if (input == "tiana") { return true; } return false; }; if (printPredicate("tiana")) { Console.WriteLine("Hello World"); } else { Console.WriteLine("555"); }
上面的代码首先利用匿名方法创建了委托Predicate<T>的委托实例printPredicate,该匿名方法的主要工作是:对输入的字符串进行判断,若输入字符串是"tiana"则返回true,否则返回false。
接下来,在条件语句中调用委托实例printPredicate,并根据printPredicate的返回值做出不同的处理:是打印"Hello World",还是打印"555"。
很显然,这里会输出"Hello World",因为传入参数为"tiana",所以委托实例会返回true。
通过对前面小例子的学习,我们已基本了解了Predicate<T>到底是什么样的一种委托?
Predicate<T>委托封装一类方法,这类方法接受一个输入参数,返回一个bool类型的值。
下面给出MSDN上的官方解释。
结合本文所给的实例及MSDN的解释,我们可以很好的理解Predicate泛型委托。
下面就结合实例来对MSDN上所给的定义进行一个说明。
MSDN上说Predicate泛型委托表示定义一组条件并确定指定对象是否符合这些条件的方法。回到我们的例子,定义中所说的“一组条件”在例子中的匿名方法中被定义。“指定对象”指的是例子中的输入参数input。可见,Predicate泛型委托表示一类方法,这类方法对输入对象(本例中的input)利用定义好的一组条件来确定该对象是否符合这些条件。最后返回bool值来指示对象是否符合这些条件。
在.Net库中,Predicate泛型委托被广泛使用。
此委托(Predicate泛型委托)由 Array 和 List 类的几种方法使用,用于在集合中搜索元素(MSDN)。
下面给出List<T>类中几个使用到Predicate泛型委托的方法的签名。
当然,在.Net库中还有其他地方也用到Predicate泛型委托,大家可以自己去研究。