命名参数在C#中调用可变参数编号

时间:2013-09-14 07:00:31

标签: c# function params

假设我有以下C#函数:

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

我想使用命名参数调用此函数:

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

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

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

2 个答案:

答案 0 :(得分:9)

不,除了明确指定数组之外,没有语法糖来命名变量参数。

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

答案 1 :(得分:6)

添加此项以防有人像谷歌一样从谷歌到这里。如果没有明确命名所有参数,并且所有明确命名的参数都不在最后,您也会收到此错误。

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);