2014-09-23 63 views
2

在大多數情況下,代表和Func/Action是可以互換的,但是有些情況下它們是不可互換的?能力有一些細微的差異嗎?何時代表和Func/Action不可互換?

(是的,有很多的SO「行動VS代表」,但沒有回答的能力問題,當他們不能互換。)

通過「他們是不能互換的情況下,」我意味着你不能直接將Func替換成相應的代理(並委託相應的Func)。

+2

什麼*確切*你的意思是可互換的?請注意,'Func' /'Action' *是代表,所以你不清楚你在說什麼......一個例子真的會有幫助。 – 2014-09-23 12:33:31

+0

@JonSkeet我編輯了這個問題,使其更加清晰。 – anopse 2014-09-23 12:39:39

+0

這還不是很清楚 - 「相應的代表」是什麼意思? 'Func '*是代表。代碼*中的一個具體示例*會更有幫助 - 目前的問題仍然聽起來像你錯過了'Func ''是委託類型 – 2014-09-23 12:50:44

回答

1

由於喬恩斯基特在評論中說,我失蹤的事實,動作/ FUNC字面上代表(我認爲這是封裝委託類):

namespace System 
{ 
    public delegate TResult Func<in T, out TResult>(T arg); 
} 

因此,有代表和相應的功能/間無差異因爲Func/Action是代表行動。

1

Func鍵和行動是不能互換的所有

  1. FuncAction都代表

  2. Func<T,TResult>應該總是返回一個值

  3. Action<T>永遠不應該返回一個值