4

据我了解,C# 有一种用于编写数组的语法:{ 1, 2, 3 }. 为什么这是无效的:

 x = { 1, 2, 3 }.GetLength(0);

虽然这是有效的?

 int[] numbers = { 1, 2, 3 };
 x = numbers.GetLength(0);

表达式的数据类型不与{ 1, 2, 3 }相同numbers吗?

4

3 回答 3

9

数组可以在任何地方使用 - 但您只能使用该特定语法(称为数组初始值设定项,用于将它们创建为变量声明的一部分 - 或作为称为数组创建表达式的更大表达式的一部分。

您仍然可以创建它们:

x = new int[] { 1, 2, 3 }.GetLength(0);

因此,其中new int[] { 1, 2, 3 }是数组创建表达式,{ 1, 2, 3 }部分是数组初始值设定项。

数组创建表达式在 C# 5 规范的第 7.6.10.4 节中描述,数组初始值设定项在第 12.6 节中描述。

于 2013-05-16T21:56:36.823 回答
7

您引用的语法是对象集合初始化程序。在初始化不同类型的实例时很有用。它本身并不创建给定类型的实例。

例如,您可以使用它来声明数组:

int[] nums = new int[] { 1, 2, 3 };

列表:

List<int> nums = new List<int> { 1, 2, 3 };

字典:

Dictionary<string, int> pairs = { { "One", 1 }, { "Two", 2 }, { "Three", 3 } };

您仍然可以使用更多代码来内联事物以实现您的初衷:

new[] { 1, 2, 3 }.GetLength(0);
于 2013-05-16T21:56:30.610 回答
2

x = new[] { 1, 2, 3 }.GetLength(0);会得到你想要的,因为{1, 2, 3}它本身不是一个数组,而是一个数组初始化器。并GetLength()与前者合作,但不适用于后者。

于 2013-05-16T21:57:47.890 回答