【发布时间】:2015-01-08 00:14:21
【问题描述】:
有效语法:
var test = new List<string>
{
"a",
"b",
"c",//Valid trailing comma
};
语法无效:
private void Test(params string[] args)
{
}
Test(
"a",
"b",
"c",//Invalid trailing comma
);
这是语法不一致的问题还是经过计算的决定?
【问题讨论】:
-
在第二个示例中,编译器使用逗号分隔方法参数,而不是集合项。
params单独处理。在方法参数上,您永远不能留下逗号。 -
编译器不是人,它不知道也不关心你想将集合传递给方法。它只是“看到”语法无效。前一种语法是有效的,因为语言规范允许初始化集合。
-
这个问题被错误地关闭为重复。 The linked question 回答“为什么我们允许在集合初始化器上使用尾随逗号”,而这是在问“为什么我们不允许在
params方法参数中使用尾随逗号”。也就是说,答案将是相似的 - 但问题不是。 -
不同之处在于,无论有没有
params,方法调用看起来都一样。从技术上讲,这可能是可能的,但后来添加了params和初始化程序。 -
这就是为什么在第一种情况下允许使用逗号:stackoverflow.com/questions/2147333/… 我认为不同之处在于,在初始化列表时,您列出的是相同类型的元素,但是在调用函数时,您可以那里有任何东西,所以语法要严格得多。