7

假设我有以下 C# 函数:

void Foo(int bar, params string[] parpar) { }

我想使用命名参数调用这个函数:

Foo(bar: 5, parpar: "a", "b", "c");

编译器给出错误消息:“命名参数不能在位置之前”,因为我在“b”和“c”之前没有名称。

有没有办法使用命名参数而无需手动将参数表示为数组?

4

2 回答 2

9

不,除了显式指定数组之外,没有任何语法糖可以使变量参数命名。

请注意,params如果允许使用这种语法(查看定位参数的结束位置),则需要单独命名参数,但只有一个名称。

于 2013-09-14T07:07:13.247 回答
7

添加这个以防有人像我一样从谷歌登陆这里。当您没有显式命名所有参数并且所有显式命名的参数都不在末尾时,您也会收到此错误。

void Foo( int parameterOne, int parameterTwo, int parameterThree) {};

// throws Named Arguments cannot precede positional
Foo(parameterOne: 1, parameterTwo:2, 3);

//This is okay
Foo(1, parameterTwo:2, parameterThree:3);
于 2016-01-13T01:59:37.797 回答