我想定義一個委託,它需要一些日期,其他參數數量未知(使用params關鍵字),並返回一個對象列表;你可以在委託中使用params關鍵字嗎?
Func<DateTime, DateTime, params int[], List<object>>
Visual Studio不喜歡讓我覺得這不被允許的語法。誰能告訴我爲什麼?
我想定義一個委託,它需要一些日期,其他參數數量未知(使用params關鍵字),並返回一個對象列表;你可以在委託中使用params關鍵字嗎?
Func<DateTime, DateTime, params int[], List<object>>
Visual Studio不喜歡讓我覺得這不被允許的語法。誰能告訴我爲什麼?
你不能有自定義一個泛型類型參數屬性(CLI不會允許它) ,並且C#編譯器通過在相關方法參數上發出System.ParamArrayAttribute
來實現params
關鍵字。
這會阻止您將它與System.Func <...>泛型委託一起使用,但您始終可以創建使用params
的自己的委託類型。
除了最後一個參數之外,你不能使用參數作爲參數,這是它抱怨的一部分。
您也不能在類型參數中使用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
本身,當然)