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

C# 为什么阵列只允许在某些地方使用?,c#,arrays,C#,Arrays,据我所知,C#有一种用于编写数组的语法:{1,2,3}。为什么这是无效的: x = { 1, 2, 3 }.GetLength(0); 这是有效的吗 int[] numbers = { 1, 2, 3 }; x = numbers.GetLength(0); 表达式{1,2,3}的数据类型是否与数字相同?您引用的语法是对象集合初始值设定项。它在初始化不同类型的实例时非常有用。它本身并不创建给定类型的实例 例如,您可以使用它来声明数组: int[] nums = new int[] {

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

 x = { 1, 2, 3 }.GetLength(0);
这是有效的吗

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

表达式
{1,2,3}
的数据类型是否与
数字
相同?

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

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

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

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

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

但您仍然可以创建它们:

x = new int[] { 1, 2, 3 }.GetLength(0);
因此在其中,
newint[]{1,2,3}
是数组创建表达式,
{1,2,3}
部分是数组初始值设定项


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

x=new[]{1,2,3}。GetLength(0);
将得到您想要的,因为
{1,2,3}
本身不是数组,而是数组初始值设定项。和
GetLength()
适用于前者,但不适用于后者。

您可能会得到一个很好的答案,但您可能会发现这很有用。不,这不是一个对象初始值设定项。它是一个数组初始值设定项。@JonSkeet-从技术上讲,它不是一个集合初始值设定项吗?不,不是它自己的-或者更确切地说,不是在OP指定的上下文中。我已经为我的ans添加了规范引用wer.集合初始值设定项是对象初始值设定项表达式的一部分-这只是一个数组初始值设定项(请记住,集合初始值设定项自C#1以来一直有效,而对象初始值设定项和集合初始值设定项仅在C#3中添加。)哇,我的意思是“记住数组初始值设定项[…]”当然:)
new[] { 1, 2, 3 }.GetLength(0);
x = new int[] { 1, 2, 3 }.GetLength(0);