2017-08-01 36 views
1

我明白Func鍵,動作,謂詞本網站提供了一些驚人的帖子的幫助和短期(FUNC鍵操作,謂語)VS轉換器和比較委託C#

Action是一個委託(指針)一個方法,它取零,一個或多個輸入參數,但不返回任何內容。

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

Predicate是經常用於比較的一種特殊的Func

現在,我在ConverterComparison委託,爲什麼.Net框架介紹這2代表口味的只是轉換和比較,何時以及如何使用這2個在現有的3

請提供更簡單和更短的困惑理解的例子。

回答

6

現在,我在轉換器和比較代表,爲什麼.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>,但是,用於比較值 - 它用於排序。

FuncAction代表們(主要是 - 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>的優點。

+0

可否請您編輯答案,並提供一些片段只是爲了理解如何使用這兩種新類型。 – LogicalDesk

+0

@LogicalDesk:你認爲哪些類型是「新」? (描述的所有類型已經有近10年了...) –

+0

我不知道比較和轉換器,這就是爲什麼我說他們是新的,對不起。 – LogicalDesk