2009-07-16 43 views
29

我想定义一个委托,它需要一些日期,其他参数数量未知(使用params关键字),并返回一个对象列表;你可以在委托中使用params关键字吗?

Func<DateTime, DateTime, params int[], List<object>> 

Visual Studio不喜欢让我觉得这不被允许的语法。谁能告诉我为什么?

回答

21

你不能有自定义一个泛型类型参数属性(CLI不会允许它) ,并且C#编译器通过在相关方法参数上发出System.ParamArrayAttribute来实现params关键字。

这会阻止您将它与System.Func <...>泛型委托一起使用,但您始终可以创建使用params的自己的委托类型。

42

除了最后一个参数之外,你不能使用参数作为参数,这是它抱怨的一部分。

您也不能在类型参数中使用params。这不仅适用于代表,而且一般来说。例如,你可以不写:

List<params string[]> list = new List<params string[]>(); 

你可以,但是,声明委托类型,像这样:

delegate void Foo(int x, params string[] y); 

... 

Foo foo = SomeMethod(); 
foo(10, "Hi", "There"); 

注意,方法组转换必须匹配方法需要一个字符串数组 - 你不能声明SomeMethod为:

void SomeMethod(int x, string a, string b) 

并期望上述工作,例如。它必须是:

void SomeMethod(int x, string[] args) 

(或者它也可以使用params本身,当然)

相关问题