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

cho*_*obo 6 c# new-operator

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

var json = new[] {
            new object[] {"20-Jun-2008", 200 },
            new object[] {"20-Jun-2009", 250 }
        };
Run Code Online (Sandbox Code Playgroud)

ken*_*n2k 23

这些是隐式类型的数组.

请参阅C#3.0规范.

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

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

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

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
Run Code Online (Sandbox Code Playgroud)

最后一个表达式导致编译时错误,因为int和string都不能隐式转换为另一个.在这种情况下,必须使用显式类型的数组创建表达式,例如将类型指定为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" }
   }
};
Run Code Online (Sandbox Code Playgroud)


Ode*_*ded 7

符号是一个隐式类型的数组声明.

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