这是为什么C#代码片段是否合法? [英] Why is this c# snippet legal?

查看:136
本文介绍了这是为什么C#代码片段是否合法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Silly question, but why does the following line compile?

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



正如你所看到的,我没有第二个元素进入和离开一个逗号那里。尽管如此编译即使你希望它不要

As you can see, I haven't entered in the second element and left a comma there. Still compiles even though you would expect it not to.

推荐答案

我想是因为ECMA 334标准说:

I suppose because the ECMA 334 standard say:

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

正如你所看到的,结尾的逗号是可以的:

As you can see, the trailing comma is allowed:

{ variable-initializer-list , }
                            ↑






PS一个很好的答案(即使这个事实已经被许多网友指出)。 :)


P.S. for a good answer (even if this fact was already pointed by many users). :)

尾随逗号可以被用来减轻自动代码生成器的执行(发电机可避免以测试在初始最后一个元素,因为它应在不尾部被写逗号)和预处理指令有条件的数组初始化。

Trailing comma could be used to ease the implementation of automatic code generators (generators can avoid to test for last element in initializer, since it should be written without the trailing comma) and conditional array initialization with preprocessor directives.

这篇关于这是为什么C#代码片段是否合法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆