为什么阵列只允许在某些地方使用?

时间:2013-05-16 21:53:22

标签: c# arrays

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

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

虽然这是有效的吗?

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

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

3 个答案:

答案 0 :(得分:9)

允许在任何地方使用数组 - 但是您只能使用该特定语法(称为数组初始化程序)来创建它们作为变量声明的一部分 - 或者作为更大表达式的一部分,称为< em>数组创建表达式。

你仍然可以创建它们:

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

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

阵列创建表达式在C#5规范的7.6.10.4节中描述,阵列初始化器在12.6节中描述。​​

答案 1 :(得分:7)

您引用的语法是 object 集合初始值设定项。在初始化不同类型的实例时很有用。它本身不会创建给定类型的实例。

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

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);

答案 2 :(得分:2)

x = new[] { 1, 2, 3 }.GetLength(0);会得到你想要的东西,因为{1, 2, 3}不在它自己的数组上,而是一个数组初始值设定项。 GetLength()与前者合作,而后者合作。