簡體   English   中英

(函數,動作,謂詞)VS轉換器和比較委托c#

[英](Func, Action, Predicate) VS Converter and Comparison delegate c#

通過該網站上一些簡短的精彩帖子,我了解了Func,Action和Predicate。

Action是方法的委托(指針),該方法接受零個,一個或多個輸入參數,但不返回任何值。

Func是方法的委托(指針),該方法接受零個,一個或多個輸入參數,並返回一個值(或引用)。

Predicate是一種常用於比較的Func

現在我對ConverterComparison委托感到困惑,為什么.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>但是, 用於比較值-它用於排序。

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>沒有任何好處。 Func<T, TResult>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM