据我了解,C#有一种编写数组的语法:{ 1, 2, 3 }
。为什么这是无效的:
x = { 1, 2, 3 }.GetLength(0);
虽然这是有效的吗?
int[] numbers = { 1, 2, 3 };
x = numbers.GetLength(0);
表达式{ 1, 2, 3 }
的数据类型不是numbers
吗?
答案 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()
与前者合作,而后者合作。