我想定义一个委托,它占用几个日期,一个未知数量的其他参数(使用params关键字),并返回一个对象列表;
Func<DateTime, DateTime, params int[], List<object>>
Run Code Online (Sandbox Code Playgroud)
Visual Studio不喜欢使我认为不允许的语法.谁能告诉我为什么?
Jon*_*eet 46
你不能将params用于除最后一个之外的任何参数......这是它抱怨的一部分.
您也不能params在类型参数中使用.这不仅适用于代表,也适用于一般情况.例如,你不能写:
List<params string[]> list = new List<params string[]>();
Run Code Online (Sandbox Code Playgroud)
但是,您可以声明一个新的委托类型,如下所示:
delegate void Foo(int x, params string[] y);
...
Foo foo = SomeMethod();
foo(10, "Hi", "There");
Run Code Online (Sandbox Code Playgroud)
请注意,方法组转换必须匹配一个采用字符串数组的方法 - 您无法将SomeMethod声明为:
void SomeMethod(int x, string a, string b)
Run Code Online (Sandbox Code Playgroud)
并且期望上述工作,例如.它必须是:
void SomeMethod(int x, string[] args)
Run Code Online (Sandbox Code Playgroud)
(params当然,它也可以使用它自己.)
Sam*_*ell 23
您不能在泛型类型参数上拥有自定义属性(CLI不允许它),并且C#编译器params通过发出System.ParamArrayAttribute相关方法参数来实现关键字.
这将阻止您使用System.Func <...>泛型委托,但您始终可以创建自己的委托类型params.