有效语法:
var test = new List<string>
{
"a",
"b",
"c",//Valid trailing comma
};
语法无效:
private void Test(params string[] args)
{
}
Test(
"a",
"b",
"c",//Invalid trailing comma
);
这是语法不一致的问题还是经过深思熟虑的决定?
最佳答案
因此,尽管我永远不会知道“真正的”原因,因为我不在编译器团队中,但我还是会尝试一下——而且有人出现的可能性值得怀疑。
尾随逗号通常在一些场景中很有用,即合并和代码生成。在诸如集合或属性初始化器和枚举之类的上下文中,留下一个尾随逗号是无害的(编译器可以安全地推断出“列表结尾”,因为还有一个可以 Hook 的结束 block 括号。
方法参数非常明确 - 编译器需要在这方面进行大量控制,以便在人们编码和其他辅助功能时提供良好的反馈。在方法参数上留下尾随逗号不会添加任何上述值,我开始对如何处理“不完整”代码造成混淆(用户是故意将其留在那里还是他们只是要输入下一个参数?)。
params
属于概念 差距是正确的,因为您将它们视为一个数组,并且您可以将它们指定为逗号分隔(在集合初始化器)。那么,为什么它们在风格上与集合初始化器不同?
params
位的语言规范没有明确指定尾随逗号支持,尽管它为集合初始化器提供了对其他语言(我认为是 C++)的奇偶校验,这增加了开发人员迁移到来自其他地方的 C#。
我的假设:它不在规范中的事实会导致 YAGNI应用,从那时起,该功能的值(value)主张是支持不实现它的明智之举。
关于c# - 为什么 C# 允许在集合初始值设定项中使用尾随逗号,但不允许在参数中使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26865030/