2011-06-29 199 views
5

我剛纔看到一個brand-new video上的Rx框架和一個特定的簽名吸引了我的眼球:Action <Action>是什麼意思?

Scheduler.schedule(this IScheduler, Action<Action>) 

在23:55,巴特迪斯說:

的最早版本是行動行動

如果Action是一個參數化類型,它又如何在尖括號內再次出現未參數化?難道它不會是無限的,這顯然是不可能的?

+10

是否還有非通用的'Action'類型?這將解釋它:) – jalf

+3

aww,現在我覺得很愚蠢我沒有回答這個問題 – jalf

+3

如果你真的想要一種烘焙麪條的類型,可以使用「代理D D(D d)」;一會兒,看看你能做什麼。 –

回答

3

Action有幾個重載。一個是非通用的,另外一個是一個,兩個,三個等類型參數。假設它們具有不同的名稱,單參數版本被稱爲Action1,並且零參數(非通用)被稱爲Action0,那麼示例將是Action1<Action0>

+0

@pst在編輯其他人的答案時,請注意將來的更多注意事項您刪除了我的文本的一半 –

+0

我沒有刪除文本如果刪除了文本,它就是SO部分的併發失敗(樂觀併發工作/僱用對於給用戶帶來的不便,我對此表示歉意 – 2011-06-30 04:25:50

+0

顯然過於樂觀 –

-1

默認參數似乎是這裏的簡單解決方案。

+0

什麼......的默認參數? :( – 2011-06-29 18:12:27

1

從MSDN:

動作示例

Action showMethod =() => { Console.WriteLine("Line"); }; 

showMethod(); 

動作< T> EXA mple

Action<int> showMethod = (i) => { Console.WriteLine("Line {0}", i); }; 

showMethod(1); 
0

行動具有非通用版本與簽名:

public delegate void Action(); 

所以它是一個用語,使void類型的動作。看起來很有趣,但是完全有效。

+0

這是一個採用Action類型參數的Action,而不是返回Action的Action。一個例子是:Action doSomething =(someMethod)=> someMethod(); – bdowden

+0

dbowden,實際上你的例子將是一個Action 而不是非通用Action。爲了讓您的示例進入非通用版本,請將其更改爲Action doSomething =()=> someMethod(); –

+0

@bdowden,你是對的,我把我的話混淆了。我編輯了這篇文章,謝謝。 – jscharf