2011-06-29 91 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