愚蠢的问题,但是为什么下面的代码行编译?

int[] i = new int[] {1,};

如您所见,我尚未在第二个元素中输入并在其中留下一个逗号。即使您不希望编译,仍然可以编译。

最佳答案

我想是因为ECMA 334标准说:

array-initializer:
    { variable-initializer-list(opt) }
    { variable-initializer-list , }
variable-initializer-list:
    variable-initializer
    variable-initializer-list , variable-initializer
variable-initializer:
    expression
    array-initializer

如您所见,尾随逗号是允许的:
{ variable-initializer-list , }
                            ↑

P.S.一个很好的答案(即使许多用户已经指出了这一事实)。 :)

尾部逗号可用于简化自动代码生成器的实现(生成器可避免测试初始化​​程序中的最后一个元素,因为应该在没有尾部逗号的情况下编写它)和使用预处理程序指令进行条件数组初始化。

关于c# - 为什么此C#代码段合法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2361265/

10-12 14:12