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

Log*_*esk 1 c# delegates

我了解Func,Action,Predicate,借助本网站提供的一些精彩帖子,简而言之 -

Action 是方法的委托(指针),它接受零个,一个或多个输入参数,但不返回任何内容.

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

Predicate是一种Func经常用于比较的特殊类型.

现在我感到困惑ConverterComparison委托,为什么.Net Framework引入了这两种代表风格,仅用于转换和比较,何时以及如何在现有3上使用这两种代表.

请提供更简单,更简短的理解示例.

Jon*_*eet 6

现在我对转换器和比较委托感到困惑,为什么.Net Framework引入了这两种代表风格,仅用于转换和比较,何时以及如何在现有3上使用这两种代码.

从历史上看,代表的顺序与您的问题所暗示的顺序相反.

Predicate<T>,Converter<TInput, TOutput>Comparison<T>在.NET 2.0中引入.他们被List<T>其他几种类型使用.在时间C#这点不支持lambda表达式,但没有支持匿名方法.代表们主要用于事件处理和启动线程......支持它们进行谓词,转换和比较是有效的一步.

请注意,Predicate<T>它不用于比较 - 它用于测试单个值.例如,您可以使用Predicate<string>"字符串长度是否超过5个字符?" Comparison<T>然而,比较值-这是用来排序.

FuncAction代表们(主要是- Action<T>在.NET 2.0;可以通过使用List<T>.ForEach)引入在.NET 3.5,与LINQ.这是C#3引入lambda表达式及其LINQ支持的时间框架,突然间代理人随处可见.我相信代表们的意识水平(以及它们如何被使用)在C#3中大量增加.

LINQ的早期预发布使用Predicate<T>而不是Func<T, bool>,但随后Where引入了额外的重载,接受Func<T, int, bool>允许索引成为谓词的一部分.

怀疑如果框架是从头开始重新设计的,那么"特殊目的"代表(Predicate<T>,Converter<TInput, TOutput>Comparison<T>)可能不存在.它可能Predicate<T>并且Comparison<T>仍然存在,因为它们提供了关于委托的目的的额外语义提示,这可以帮助提高可读性 - 但Converter<TInput, TOutput>实际上没有任何好处Func<T, TResult>.