这个新的[]是什么简写?

时间:2012-01-29 20:08:00

标签: c# new-operator

我似乎无法找到关于新[]应该是什么的任何文档。从下面的例子看,它似乎是一个对象数组的简写

var json = new[] {
            new object[] {"20-Jun-2008", 200 },
            new object[] {"20-Jun-2009", 250 }
        };

4 个答案:

答案 0 :(得分:23)

这些是隐式类型数组

请参阅C# 3.0 specifications

  

数组创建表达式(第7.5.10.2节)的语法扩展为   支持隐式类型化数组创建表达式:   array-creation-expression:... new [ ] array-initializer

     

在隐式类型化数组创建表达式中,类型为   数组实例是从数组中指定的元素推断出来的   初始化。具体而言,由类型形成的集合   数组初始值设定项中的表达式必须只包含一个类型   集合中的每个类型都可以隐式转换,如果是这种类型   不是null类型,创建该类型的数组。如果只是一个   无法推断类型,或者推断类型是null类型,a   发生编译时错误。

     

以下是隐式类型化数组创建的示例   表达式:

var a = new[] { 1, 10, 100, 1000 };            // int[]
var b = new[] { 1, 1.5, 2, 2.5 };            // double[]
var c = new[] { "hello", null, "world" };      // string[]
var d = new[] { 1, "one", 2, "two" };         // Error
     

最后一个表达式导致编译时错误,因为它都不是int   也不是字符串可以隐式转换为另一个。明确键入   例如,在这种情况下必须使用数组创建表达式   指定类型为object []。或者,其中一个要素   可以转换为一个共同的基类型,然后成为   推断元素类型。

     

隐式类型化数组创建表达式可以与之结合使用   用于创建匿名类型数据的匿名对象初始值设定项   结构。例如:

var contacts = new[] {
   new {
      Name = "Chris Smith",
      PhoneNumbers = new[] { "206-555-0101", "425-882-8080" }
   },
   new {
      Name = "Bob Harris",
      PhoneNumbers = new[] { "650-555-0199" }
   }
};

答案 1 :(得分:7)

符号是implicitly typed array声明。

在您的情况下,它是一个对象数组的数组。

答案 2 :(得分:1)

这意味着new []是一个隐式类型的数组。由于它是隐式输入的,因此您必须像在此示例中那样为其分配内容。就像您必须使用var关键字一样。

答案 3 :(得分:1)

这是隐式输入。由于该集合中的所有元素都是object数组,因此编译器可以推断出数组本身必须是object数组的集合。