c# - 为什么 C# 允许在集合初始值设定项中使用尾随逗号,但不允许在参数中使用?

标签 c# syntax

有效语法:

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/

相关文章:

c# - 如何在 C# windows 应用程序中以编程方式修改设置文件 (app.config) 的信息?

c# - 确定是否在 WPF 或控制台模式下运行 (c#)

c# - 在 F# 中创建一个操作以使用 c# 方法

c# - 组织树绘制算法

PHP 解析错误 : syntax error, 使用 IF 替代语法的文件意外结束

c# - 为什么 C# 3.0 对象初始值设定项构造函数括号是可选的?

c# - Webapi http 调用导致 SSL 异常

c# - 初始化继承类中的字段

sql - SQL语法错误以外部方式创建过程

sql - 数据库更新脚本中的 ALTER PROCEDURE 语法错误