所以,我正在修改我的一个代码,最后写了这样的东西,
class TestClass
{
static void Main(string[] args)
{
var lstObj = new List<List<string>>()
{
new List<string>() { "ABC","DEF", },
new List<string>() {"GHI","JKL" },
};
}
}
请注意以下行中的额外逗号(&#34;,&#34;)
new List(){&#34; ABC&#34;,&#34; DEF&#34;,},//&#34; DEF&#34;
new List(){&#34; GHI&#34;,&#34; JKL&#34; },//在&#39;}&#39;
之后
在意识到错字之后,我决定取消Build,更正它并重新启动Build。但是我太晚了,令我惊讶的是,Build已经成功完成了。
我只是想知道这是否是正确的语法或者它是否具有任何特殊含义。
尝试查找支持此功能的文档,但无法找到。尝试查找C#语言规范,理解与此相关的任何内容都超出了我的能力。
答案 0 :(得分: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
请注意,明确允许使用额外的逗号。
我认为这是设计决定摆脱无用的编译器错误。允许使用额外的逗号不会给语言添加任何歧义。
答案 1 :(得分:4)
C#忽略括号初始值设定项中的尾随逗号。除了Martin引用的规范部分之外,在官方Microsoft示例中存在此at least one示例(请参阅student2示例)。在你的情况下:
new List<string>() { "ABC","DEF", },
new List<string>() {"GHI","JKL" },
完全等同于
new List<string>() { "ABC","DEF"},
new List<string>() {"GHI","JKL"}
正如MK87所指出的,这是一件方便的事情。它允许您复制和粘贴列表元素,而无需担心添加和删除尾随逗号。
答案 2 :(得分:2)
如果您之前没有使用过它会让人感到困惑,但它会使所有项目在语法上相同,排序更好,从而更容易阅读。此外(更重要的是),此语法使您的代码更容易更改。
例如,假设您有一个5元素列表,则必须剪切最后一个元素并将其放在第1位。
使用last-without-comma sintax,你必须:
使用all-with-逗号语法,您必须只执行第1点和第2点。