这个 new[] 是什么意思?

6

我似乎找不到任何关于new[]是什么的文档。从下面的示例中,它似乎是一个对象数组的速记方式。

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

你不能只是检查´json´的类型来看它返回了什么吗? - Only Bolivian Here
4个回答

24

这些是隐式类型数组

请参阅C# 3.0规范

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

在隐式类型数组创建表达式中,数组实例的类型是从数组初始化器中指定的元素推断出来的。具体来说, 数组初始化器中表达式的类型集合必须恰好包含一个类型,该类型可以将集合中的每个类型隐式转换为其自身, 如果该类型不是空类型,则创建该类型的数组。如果无法推断出一个确定的类型,或者推断出的类型是空类型, 则会发生编译时错误。

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

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" }
   }
};

7

这个符号是一个隐式类型数组声明。

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


它怎么是匿名的,json变量不是类型为object[][]吗? - dillenmeister

1

这意味着new[]是一个隐式类型的数组。由于它是隐式类型的,你必须像这个例子一样给它赋值。就像使用var关键字一样。


1

这是隐式类型转换。由于该集合中的所有元素都是object数组,编译器可以推断出数组本身必须是一组object数组。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接