[英](Func, Action, Predicate) VS Converter and Comparison delegate c#
通過該網站上一些簡短的精彩帖子,我了解了Func,Action和Predicate。
Action
是方法的委托(指針),該方法接受零個,一個或多個輸入參數,但不返回任何值。
Func
是方法的委托(指針),該方法接受零個,一個或多個輸入參數,並返回一個值(或引用)。
Predicate
是一種常用於比較的Func
。
現在我對Converter
和Comparison
委托感到困惑,為什么.Net Framework引入了這兩種委托形式,僅用於轉換和比較,何時以及如何在現有3上使用這兩種。
請提供更簡單,更簡短的示例以供理解。
現在我對轉換器和比較委托感到困惑,為什么.Net Framework引入了這兩種委托形式,僅用於轉換和比較,何時以及如何在現有3上使用這兩種。
從歷史上看,代表的介紹順序與您的問題所建議的順序相反。
.NET 2.0中引入了Predicate<T>
, Converter<TInput, TOutput>
和Comparison<T>
。 List<T>
和其他一些類型使用了它們。 在時間C#這點不支持lambda表達式,但沒有支持匿名方法。 委托主要用於事件處理和啟動線程...有效地支持它們進行謂詞,轉換和比較。
請注意, Predicate<T>
並不用於比較 -它用於測試單個值。 例如,對於“字符串長度是否超過5個字符?”,您可能具有Predicate<string>
。 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>
沒有任何好處。 Func<T, TResult>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.