【发布时间】:2012-04-13 13:43:22
【问题描述】:
我正在尝试使用以下重载在 Dispatcher 上调用 Invoke:
public object Invoke(Delegate method, params object[] args);
我想使用命名参数,但我似乎找不到带有 params 修饰符的参数的语法。以下所有内容都无法编译:
dispatcher.Invoke(method: () => { }, args: {});
dispatcher.Invoke(method: () => { }, args: new object[0]);
dispatcher.Invoke(method: () => { }, args: null);
dispatcher.Invoke(method: () => { }, args: new object[] {});
object[] foo = {};
dispatcher.Invoke(method: () => { }, args: foo);
dispatcher.Invoke(method: () => { }, args: new[] {"Hello", "World!"});
我发现这两个问题似乎没有明确的答案:
How to set named argument for string.Format?
所以我的问题是:能做到吗?如果是,怎么做?
UDPATE
Daniel Hilgarth 表明,是的,params 可以与命名参数一起使用。我使用这种模式整合了他的答案:
Action method = () => { };
if (_dispatcher != null)
_dispatcher.Invoke(method: method, args: null);
else
method();
【问题讨论】:
-
第一个问题是我的,似乎没有办法。你必须不带参数。
-
你说“好像”;最好有一个明确的答案;-)
-
请指定确切的编译器错误。当我将
Delegate更改为Action时,它对我有用,所以这不是params关键字的问题。 -
@ChuckNorris:原来是可以做到的......
-
不是他想要的方式。他想做这样的事情:
dispatcher.Invoke(method: method, args: "Hello", "World");。请注意,没有传递给命名参数args的数组,而是一个逗号分隔值的列表。