現在,我在轉換器和比較代表,爲什麼.Net框架介紹這2代表口味的只是轉換和比較,何時以及如何在現有的3
歷史上使用這些困惑2 ,代表們按照你問題提出的順序相反的順序介紹。
Predicate<T>
,Converter<TInput, TOutput>
和Comparison<T>
在.NET 2.0中引入。他們被List<T>
和其他一些類型使用。在此時C#不支持lambda表達式,但確實支持匿名方法。代表主要是用於事件處理和啓動線程...支持它們的謂詞,轉換和比較是一個有效的嬰兒步驟。
注意Predicate<T>
不用於比較 - 它用於測試一個值。例如,對於「字符串長度是否超過5個字符?」,您可能有一個Predicate<string>
? Comparison<T>
,但是,是用於比較值 - 它用於排序。
的Func
和Action
代表們(主要是 - Action<T>
在.NET 2.0;可以通過使用)引入在.NET 3.5,與LINQ。這是C#3引入lambda表達式及其LINQ支持的時間框架,並且突然間代表處處處處處處處處處可見。我相信代表意識(以及它們如何被使用)的水平大規模上升用C#LINQ的3
早期預發行版中使用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>
的優點。
可否請您編輯答案,並提供一些片段只是爲了理解如何使用這兩種新類型。 – LogicalDesk
@LogicalDesk:你認爲哪些類型是「新」? (描述的所有類型已經有近10年了...) –
我不知道比較和轉換器,這就是爲什麼我說他們是新的,對不起。 – LogicalDesk