C# - 对象初始化器的语法

jjk*_*les 1 c#

所以,我正在修改我的一个代码,最后写了这样的东西,

class TestClass
{
    static void Main(string[] args)
    {
        var lstObj = new List<List<string>>()
        {
            new List<string>() { "ABC","DEF", },
            new List<string>() {"GHI","JKL" },
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

注意以下行中的额外逗号(","),

new List(){"ABC","DEF",},//在"DEF"之后

new List(){"GHI","JKL"},//'}'之后'

在意识到错字之后,我决定取消Build,更正它并重新启动Build.但是我太晚了,令我惊讶的是,Build已经成功完成了.

我只是想知道这是否是正确的语法或者它是否具有任何特殊含义.

试图查找支持此文档但未找到任何文档.尝试查找C#语言规范,理解与此相关的任何内容都超出我的意义.

Mar*_*tin 5

C#允许在多个地方使用额外的逗号.考虑对象初始化器,C#5.0语言规范在7.6.10.2节中提到:

object-initializer:
    {   member-initializer-list_opt   }
    {   member-initializer-list   ,   }

member-initializer-list:
    member-initializer
    member-initializer-list   ,   member-initializer
Run Code Online (Sandbox Code Playgroud)

请注意,明确允许使用额外的逗号.

我认为这是一个设计决定,摆脱没有用的编译器错误.允许使用额外的逗号不会给语言添加任何歧义.