我了解Func,Action,Predicate,借助本网站提供的一些精彩帖子,简而言之 -
Action 是方法的委托(指针),它接受零个,一个或多个输入参数,但不返回任何内容.
Func 是方法的委托(指针),它接受零个,一个或多个输入参数,并返回一个值(或引用).
Predicate是一种Func经常用于比较的特殊类型.
现在我感到困惑Converter和Comparison委托,为什么.Net Framework引入了这两种代表风格,仅用于转换和比较,何时以及如何在现有3上使用这两种代表.
请提供更简单,更简短的理解示例.
现在我对转换器和比较委托感到困惑,为什么.Net Framework引入了这两种代表风格,仅用于转换和比较,何时以及如何在现有3上使用这两种代码.
从历史上看,代表的顺序与您的问题所暗示的顺序相反.
Predicate<T>,Converter<TInput, TOutput>并Comparison<T>在.NET 2.0中引入.他们被List<T>其他几种类型使用.在时间C#这点不支持lambda表达式,但没有支持匿名方法.代表们主要用于事件处理和启动线程......支持它们进行谓词,转换和比较是有效的一步.
请注意,Predicate<T>它不用于比较 - 它用于测试单个值.例如,您可以使用Predicate<string>"字符串长度是否超过5个字符?" Comparison<T>然而,是比较值-这是用来排序.
的Func和Action代表们(主要是- 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>.
| 归档时间: |
|
| 查看次数: |
494 次 |
| 最近记录: |