有效的语法:
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
落入了“概念性”差距,因为您将其视为数组,并且可以指定它们为逗号分隔(在集合初始化程序之前支持)。那么为什么它们的风格与集合初始化程序不同呢?
params
的语言规范并没有明确指定支持尾随逗号,尽管对于集合初始化程序来说是这样的,以达到与其他语言(我想是C ++)的一致性,这增加了从其他语言迁移到 C#的开发人员的熟悉感。
我的推测是:由于它不在规范中,因此导致 YAGNI 应用,从那时起,该功能的价值主张毫无疑问地倾向于不实现。
如果您查看词法语法,请点击此处
C.2.9 数组
array-initializer:
{ variable-initializer-listopt }
{ variable-initializer-list , }// This comma is causing this
variable-initializer-list:
variable-initializer
variable-initializer-list , variable-initializer
formal-parameter-list:
fixed-parameters
fixed-parameters , parameter-array
parameter-array
fixed-parameters:
fixed-parameter
fixed-parameters , fixed-parameter
fixed-parameter:
attributesopt parameter-modifieropt type identifier
parameter-modifier:
ref
out
parameter-array:
attributesopt params array-type identifier
由于语言的书写方式,不允许使用尾随逗号,具体原因我不清楚,但 Adam 可以解释。
params
被单独处理。在方法参数上,您从未能够留下尾随逗号。 - Adam Houldsworthparams
方法参数上使用尾随逗号”。话虽如此,答案可能会相似 - 但问题并不相同。 - Adam Houldsworthparams
时方法调用看起来相同。从技术上讲,这可能是可行的,但是params
和初始化程序是后来添加的。 - BartoszKP