2009-07-16 97 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本身,當然)

相關問題