代码之家  ›  专栏  ›  技术社区  ›  Danvil

为什么编译器不抱怨数组或对象初始值设定项中的其他“,”?

  •  5
  • Danvil  · 技术社区  · 14 年前

    使用简单类型

    class A {
      public int X, Y;
    }
    

    使用对象初始化器,可以

    var a = new A { X=0, Y=0 };
    

    但是 编译器也接受以下内容:

    var a = new A { X=0, Y=0, }; // notice the additional ','
    

    同样适用于 int[] v = new int[] { 1, 2, };

    这看起来有点奇怪…他们是否忘记拒绝编译器中的附加“,”,或者这背后有更深的含义?

    2 回复  |  直到 14 年前
        1
  •  5
  •   Greg Hewgill    14 年前

    没有什么深奥的东西,这是许多(但不是所有)语言的编译器所接受的一个普遍现象。这样做列表更容易:

    var a = new A {
        X = 0,
        Y = 0,
    };
    

    当你想添加 Z = 0 ,不需要编辑前一行来添加逗号。这改进了源代码控制增量,因为只有一行新行,而不是一行新行和一行更改行。

        2
  •  1
  •   n535    14 年前

    这也简化了代码生成器的实现。他们不必检查最后一个逗号。