void Main()
{
Test t = new Test
{
A = "a",
B = "b", // <-- erroneous trailing comma
};
}
public class Test
{
public string A { get; set; }
public string B { get; set; }
}
我发现我的代码中有很多上面的错字。我总是很惊讶编译器似乎并不关心这个。为什么上面不是语法错误?它有任何实际有效的用途吗?
最佳答案
I find the above typo in my code quite a lot. I'm always suprised that the compiler doesn't seem to care about this. Why is the above not a syntax errror?
因为设计 C# 句法语法的人足够聪明,可以从其他不允许允许悬空逗号的编程语言中吸取教训,从而不断激怒那些语言的程序员。 p>
例如,ECMAScript (JavaScript) 最初在这个问题上保持沉默,因此一些实现(Firefox 中的 SpiderMonkey、Opera 的 JavaScript 等)自然允许它们,而其他实现(Microsoft 的 JScript)则不允许。因此,这导致了在这里和其他地方出现大量“为什么这在 IE 中不起作用”的问题。 (幸运的是,ECMAScript 5 明确允许它们,并且 IE8 最终在对象初始值设定项中支持它们——IE8 仍然以非标准方式处理数组初始值设定项,尽管公平地说,这些悬空逗号也仅在 ECMAScript 5 中得到澄清。)
您在 C# 语法的许多其他地方也可以找到它,例如枚举和数组初始值设定项。
关于c# - 内联属性初始化和尾随逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5245152/