据我了解,C# 有一种用于编写数组的语法:{ 1, 2, 3 }
. 为什么这是无效的:
x = { 1, 2, 3 }.GetLength(0);
虽然这是有效的?
int[] numbers = { 1, 2, 3 };
x = numbers.GetLength(0);
表达式的数据类型不与{ 1, 2, 3 }
相同numbers
吗?
数组可以在任何地方使用 - 但您只能使用该特定语法(称为数组初始值设定项,用于将它们创建为变量声明的一部分 - 或作为称为数组创建表达式的更大表达式的一部分。
您仍然可以创建它们:
x = new int[] { 1, 2, 3 }.GetLength(0);
因此,其中new int[] { 1, 2, 3 }
是数组创建表达式,{ 1, 2, 3 }
部分是数组初始值设定项。
数组创建表达式在 C# 5 规范的第 7.6.10.4 节中描述,数组初始值设定项在第 12.6 节中描述。
您引用的语法是对象集合初始化程序。在初始化不同类型的实例时很有用。它本身并不创建给定类型的实例。
例如,您可以使用它来声明数组:
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);
x = new[] { 1, 2, 3 }.GetLength(0);
会得到你想要的,因为{1, 2, 3}
它本身不是一个数组,而是一个数组初始化器。并GetLength()
与前者合作,但不适用于后者。