我似乎无法找到关于新[]应该是什么的任何文档。从下面的例子看,它似乎是一个对象数组的简写
var json = new[] {
new object[] {"20-Jun-2008", 200 },
new object[] {"20-Jun-2009", 250 }
};
答案 0 :(得分:23)
这些是隐式类型数组。
数组创建表达式(第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
数组的集合。