有效语法:
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得以应用,从这一点出发,该功能的值(value)主张无疑是对不实现该功能的明智之举。
关于c# - 为什么C#在集合初始值设定项中允许尾随逗号,但在params中不允许尾随逗号?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26865030/