我似乎找不到任何关于new[]是什么的文档。从下面的示例中,它似乎是一个对象数组的速记方式。
var json = new[] {
new object[] {"20-Jun-2008", 200 },
new object[] {"20-Jun-2009", 250 }
};
我似乎找不到任何关于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
在隐式类型数组创建表达式中,数组实例的类型是从数组初始化器中指定的元素推断出来的。具体来说, 数组初始化器中表达式的类型集合必须恰好包含一个类型,该类型可以将集合中的每个类型隐式转换为其自身, 如果该类型不是空类型,则创建该类型的数组。如果无法推断出一个确定的类型,或者推断出的类型是空类型, 则会发生编译时错误。
以下是隐式类型数组创建表达式的示例:
最后一个表达式会导致编译时错误,因为int和string都无法隐式转换为另一种类型。在这种情况下,必须使用显式类型的数组创建表达式,例如指定类型为object[]。或者,可以将其中一个元素强制转换为公共基础类型,然后该类型将成为推断出的元素类型。
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
隐式类型的数组创建表达式可以与匿名对象初始化项结合使用,创建匿名类型数据结构。例如:
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
数组。