这个新的是什么简写?

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

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

这些是隐式类型的数组

请参阅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 

最后一个表达式导致编译时错误,因为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" } } }; 

表示法是一个隐式类型的数组声明。

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

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

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