Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 内联属性初始化和尾随逗号 void Main() { 测试t=新测试 { A=“A”, B=“B”,//_C#_Compiler Construction_Syntax - Fatal编程技术网

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()+"\"," );
}
...