C# - 委托谓词<T>

use*_*677 3 c#

委托的用途是什么Predicate<T>,我应该像嵌套样式那样处理它

Func<Predicate<T>>?.简单的例子请.

Nad*_*zie 10

有几个用例允许调用者提供返回true或的函数false.该Predicate<T>类型是一个办法做到这一点.这没有什么不同Func<T, bool>(除了Predicate<T>在早期版本的C#中可用).

一个简单的(和人为的例子):

string[] strings = new string[] { "hello", "goodbye", "how are you" };

Array.FindAll(strings, delegate(string s)
                           {
                               return s.StartsWith("h");
                           });
Run Code Online (Sandbox Code Playgroud)

或者,lambda风格:

Array.FindAll(strings, s => s.StartsWith("h"));
Run Code Online (Sandbox Code Playgroud)

FindAll方法返回与条件匹配的所有项的数组.在这种情况下,所有以"h"开头的字符串.该Predicates.StartsWith("h").

这里有用的是,Array类知道如何搜索其所有元素,并创建一个只包含匹配元素的新数组.算法的这一部分对于许多代码是通用的.不常见的部分是匹配标准,它将根据特定代码段的要求而变化.因此调用者指定逻辑的一部分,并将其作为a传递Predicate.

可以以"嵌套"样式处理它. Func<Predicate<T>>表示您正在声明一个返回a的函数Predicate<T>.你确定这是你想要的吗?你想要实现什么目标?