有效语法:
var test = new List<string>
{
"a",
"b",
"c",//Valid trailing comma
};
Run Code Online (Sandbox Code Playgroud)
无效的语法:
private void Test(params string[] args)
{
}
Test(
"a",
"b",
"c",//Invalid trailing comma
);
Run Code Online (Sandbox Code Playgroud)
这是语法不一致还是计算决策的问题?
Ada*_*rth 10
因此,即使我不知道"真正的"原因,因为我不在编译器团队中,所以我会对此进行一次尝试 - 并且一次出现的可能性值得怀疑.
尾随逗号通常在一些场景中很有用,即合并和代码生成.在收集或属性初始化器和枚举之类的上下文中,留下尾随逗号是无害的(编译器可以安全地推断出"列表末尾",因为它还有一个可以挂钩的闭合块括号.
方法参数非常明确 - 编译器需要在此区域进行大量控制,以便在人们编码和其他辅助功能时提供良好的反馈.在方法参数上留下一个尾随逗号不会添加上面的任何值,并且我开始对如何处理"不完整"代码造成混淆(用户是故意将它留在那里还是他们只是要在下一个参数中键入?).
你是正确的,params落入概念在该间隙你看到他们作为一个数组,并作为逗号分隔,您可以指定它们(这是集合initialisers之前支持).那么为什么它们会从收藏初始化者中脱颖而出呢?
该params位的语言规范没有明确指定尾随逗号支持,尽管它适用于集合初始化程序以实现与其他语言(我认为是C++)的奇偶校验,这增加了开发人员从其他地方迁移到C#的熟悉程度.
我的假设:事实上它不符合规范然后导致YAGNI应用,从那时起,该特征的价值主张是一个明智的选择,而不是实现它.
| 归档时间: |
|
| 查看次数: |
1393 次 |
| 最近记录: |