c# - 为什么这个 c# 片段是合法的?

标签 c# grammar

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

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

如您所见,我没有输入第二个元素并在那里留了一个逗号。仍然可以编译,即使您不希望它编译。<​​/p>

最佳答案

我想是因为 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 , }
                            ↑

附言一个好的答案(即使这个事实已经被许多用户指出)。 :)

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

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

相关文章:

compiler-construction - 将语法转换为 LL(1) 语法 : some problems

regex - 偶数个 1 的位串的正则表达式

c# - #define 宏的 C 到 C# 转换

c# - NLog 不显示任何内容?

c# - 用 C# 字符串替换图像 URL

c++ - Boost::Spirit::Qi - 将规则拆分为单独的类

lisp - 如何使用 Lisp 表达 BNF?

regex - Ruby 是否有类似于 Perl 6 语法的插件?

c# - 使用最新的 Monodevelop 和 VS 2012 RC 共享代码时出现问题

C# 如何从 IE 获取当前 URL?