C# 内联属性初始化和尾随逗号 void Main() { 测试t=新测试 { A=“A”, B=“B”,//
这不是一个错误,因为它很方便。要添加到初始值设定项中,您只需添加一行,而不是在一行中添加逗号并输入一整行C# 内联属性初始化和尾随逗号 void Main() { 测试t=新测试 { A=“A”, B=“B”,//,c#,compiler-construction,syntax,C#,Compiler Construction,Syntax,这不是一个错误,因为它很方便。要添加到初始值设定项中,您只需添加一行,而不是在一行中添加逗号并输入一整行 这在其他语言(Python、Ruby、Haskell)的列表/数组初始化中也很常见。我认为可以简化自动代码生成 在这种情况下,您可以让您的程序创建这样的代码 void Main() { Test t = new Test { A = "a", B = "b", // <-- erroneous trailing comma };
这在其他语言(Python、Ruby、Haskell)的列表/数组初始化中也很常见。我认为可以简化自动代码生成 在这种情况下,您可以让您的程序创建这样的代码
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; }
}
。。。
对于(chc=‘a’;c< z’;C++)
{
AddToOutput(c+“=\”+c.ToLower()+“\”,”);
}
...
并且不必关心删除最后一个尾随逗号
我发现我的代码中有很多上面的错误。我总是惊讶于编译器似乎不关心这个问题。为什么上面的错误不是语法错误
因为设计C#语法语法的人足够聪明,可以从其他不允许使用悬空逗号的编程语言中吸取教训,这让那些语言的程序员们不断感到恼火
例如,ECMAScript(JavaScript)一开始对这个问题保持沉默,因此一些实现(Firefox中的SpiderMonkey、Opera的JavaScript等)自然允许它们,而其他实现(Microsoft的JScript)则不允许。因此,这导致了大量的“为什么这在IE中不起作用”问题。(幸运的是,ECMAScript 5明确允许它们,IE8最终在对象初始值设定项中支持它们——IE8仍然以非标准的方式对待数组初始值设定项,不过公平地说,这些初始值设定项的悬空逗号也只是在ECMAScript 5中澄清的。)
在C#语法中的许多其他地方也会发现这一点,比如枚举和数组初始值设定项。为什么这应该是语法错误?在上一个语句的末尾放分号没有问题,对吧?所以我认为在上一个初始值设定项的末尾放逗号没有什么错。
...
for( char c = 'A'; c < 'Z'; c++ )
{
AddToOutput( c + " = \"+c.ToLower()+"\"," );
}
...