(Func、Action、Predicate)VS转换器和比较委托c#

(Func、Action、Predicate)VS转换器和比较委托c#,c#,delegates,C#,Delegates,我了解Func、Action和Predicate,这是在这个网站上提供的一些令人惊讶的帖子的帮助下,简而言之- 操作是指向方法的委托(指针),该方法接受零个、一个或多个输入参数,但不返回任何内容 Func是指向方法的委托(指针),该方法接受零、一个或多个输入参数,并返回值(或引用) 谓词是一种特殊的Func函数,常用于比较 现在我对Converter和Comparisondelegate感到困惑,为什么.Net Framework引入这两种delegate风格只是为了进行转换和比较,以及何时和如

我了解Func、Action和Predicate,这是在这个网站上提供的一些令人惊讶的帖子的帮助下,简而言之-

操作
是指向方法的委托(指针),该方法接受零个、一个或多个输入参数,但不返回任何内容

Func
是指向方法的委托(指针),该方法接受零、一个或多个输入参数,并返回值(或引用)

谓词
是一种特殊的
Func
函数,常用于比较

现在我对
Converter
Comparison
delegate感到困惑,为什么.Net Framework引入这两种delegate风格只是为了进行转换和比较,以及何时和如何在现有的3个delegate中使用这两种

请提供更简单、更简短的示例以供理解

现在我对Converter和Comparison delegate感到困惑,为什么.Net Framework引入这两种delegate风格来进行转换和比较,以及何时和如何使用这两种风格来代替现有的3种

从历史上看,学员的介绍顺序与您的问题建议的顺序相反

谓词
转换器
比较
都是在.NET2.0中引入的。它们被
List
和其他一些类型使用。此时C#不支持lambda表达式,但支持匿名方法。委托主要用于事件处理和启动线程。。。在谓词、转换和比较方面为它们提供支持实际上是一个很小的步骤

请注意,
谓词
不用于比较-它用于测试单个值。例如,您可以为“字符串长度是否超过5个字符?”使用
谓词
比较
,但是,它用于比较值-用于排序

Func
Action
代理是在.NET 3.5中引入的(大多数-
Action
是在.NET 2.0中;由
List.ForEach
使用),带有LINQ。这就是C#3引入lambda表达式及其LINQ支持的时间框架,突然间,代理无处不在。我相信,C#3大大提高了学员的认识水平(以及如何使用他们)

LINQ的早期预发行版使用了
谓词
而不是
Func
,但随后引入了
的额外重载,其中
接受
Func
,以允许索引成为谓词的一部分

我怀疑如果从头开始重新设计框架,“特殊用途”委托(
谓词
转换器
比较
)可能不存在。
谓词
比较
可能仍然存在,因为它们为委托的目的提供了额外的语义提示,这有助于可读性-但是
转换器
函数
相比确实没有任何好处

现在我对Converter和Comparison delegate感到困惑,为什么.Net Framework引入这两种delegate风格来进行转换和比较,以及何时和如何使用这两种风格来代替现有的3种

从历史上看,学员的介绍顺序与您的问题建议的顺序相反

谓词
转换器
比较
都是在.NET2.0中引入的。它们被
List
和其他一些类型使用。此时C#不支持lambda表达式,但支持匿名方法。委托主要用于事件处理和启动线程。。。在谓词、转换和比较方面为它们提供支持实际上是一个很小的步骤

请注意,
谓词
不用于比较-它用于测试单个值。例如,您可以为“字符串长度是否超过5个字符?”使用
谓词
比较
,但是,它用于比较值-用于排序

Func
Action
代理是在.NET 3.5中引入的(大多数-
Action
是在.NET 2.0中;由
List.ForEach
使用),带有LINQ。这就是C#3引入lambda表达式及其LINQ支持的时间框架,突然间,代理无处不在。我相信,C#3大大提高了学员的认识水平(以及如何使用他们)

LINQ的早期预发行版使用了
谓词
而不是
Func
,但随后引入了
的额外重载,其中
接受
Func
,以允许索引成为谓词的一部分


我怀疑如果从头开始重新设计框架,“特殊用途”委托(
谓词
转换器
比较
)可能不存在。
谓词
比较
可能仍然存在,由于它们为委托的目的提供了额外的语义提示,这有助于提高可读性,但与
Func

相比,
Converter
确实没有任何好处。请编辑答案并提供一些片段,以便理解如何使用这两种新类型。@LogicalDesk:您相信哪种类型“新”?(所描述的所有类型已经存在近10年了…)我不知道比较和转换,这就是为什么我说它们是新的,对此表示抱歉。@LogicalDesk:请仔细阅读我的答案-历史在这里很重要。你在问为什么X是在Y已经可以处理所有事情的情况下引入的——当你知道X是第一位的时候,这就没什么意义了。你是legend@Jon,我看过了你的书,它们也和你一样令人惊奇。你能编辑答案并提供一些片段,以便理解如何使用这两种新类型。@LogicalDesk:你认为哪种类型是“新的”?(所有类型均为d