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

发布于 2024-12-29 19:13:07 字数 205 浏览 1 评论 0原文

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

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

I can't seem to find any documentation on what new[] is supposed to be. From the example below it seems to be an object array shorthand

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

枕梦 2025-01-05 19:13:07

这些是隐式类型数组

请参阅 C# 3.0 规范

数组创建表达式的语法 (§7.5.10.2) 扩展为
支持隐式类型数组创建表达式:
数组创建表达式:... new [] 数组初始值设定项

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

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

var a = new[] { 1, 10, 100, 1000 }; // 整数[]
var b = new[] { 1, 1.5, 2, 2.5 }; // 双倍的[]
var c = new[] { "你好", null, "世界" }; // 细绳[]
var d = new[] { 1, "一", 2, "二" }; // 错误

最后一个表达式会导致编译时错误,因为 int 都不是
两个字符串都不能隐式转换为另一个字符串。显式键入
在这种情况下必须使用数组创建表达式,例如
指定类型为 object[]。或者,其中一个元素
可以转换为公共基类型,然后该类型将成为
推断的元素类型。

隐式类型数组创建表达式可以与
匿名对象初始值设定项用于创建匿名类型数据
结构。例如:

var 联系人 = new[] {
   新的 {
      姓名=“克里斯·史密斯”,
      电话号码 = new[] { "206-555-0101", "425-882-8080" }
   },
   新的 {
      姓名=“鲍勃·哈里斯”,
      电话号码 = new[] { "650-555-0199" }
   }
};

These are implicitly typed arrays.

See C# 3.0 specifications.

The syntax of array creation expressions (§7.5.10.2) is extended to
support implicitly typed array creation expressions:
array-creation-expression: ... new [ ] array-initializer

In an implicitly typed array creation expression, the type of the
array instance is inferred from the elements specified in the array
initializer. Specifically, the set formed by the types of the
expressions in the array initializer must contain exactly one type to
which each type in the set is implicitly convertible, and if that type
is not the null type, an array of that type is created. If exactly one
type cannot be inferred, or if the inferred type is the null type, a
compile-time error occurs.

The following are examples of implicitly typed array creation
expressions:

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

The last expression causes a compile-time error because neither int
nor string is implicitly convertible to the other. An explicitly typed
array creation expression must be used in this case, for example
specifying the type to be object[]. Alternatively, one of the elements
can be cast to a common base type, which would then become the
inferred element type.

Implicitly typed array creation expressions can be combined with
anonymous object initializers to create anonymously typed data
structures. For example:

var contacts = new[] {
   new {
      Name = "Chris Smith",
      PhoneNumbers = new[] { "206-555-0101", "425-882-8080" }
   },
   new {
      Name = "Bob Harris",
      PhoneNumbers = new[] { "650-555-0199" }
   }
};
雪花飘飘的天空 2025-01-05 19:13:07

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

在你的例子中,它是一个对象数组的数组。

The notation is an implicitly typed array declaration.

In your case, it is a array of object arrays.

巷子口的你 2025-01-05 19:13:07

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

It means that new[] is an implicitly typed array. Since it's implicitly typed, you have to assign something to it as in this example. Just as you have to with the var keyword.

画▽骨i 2025-01-05 19:13:07

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

It's implicit typing. Since all the elements in that collection are object arrays, the compiler can deduce that the array itself must be a collection of object arrays.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文