据我所知,C#有一种编写数组的语法:{ 1, 2, 3 }.为什么这个无效:
x = { 1, 2, 3 }.GetLength(0);
Run Code Online (Sandbox Code Playgroud)
虽然这是有效的?
int[] numbers = { 1, 2, 3 };
x = numbers.GetLength(0);
Run Code Online (Sandbox Code Playgroud)
表达式的数据类型不{ 1, 2, 3 }一样numbers吗?
允许在任何地方使用数组 - 但是您只能使用该特定语法(称为数组初始化程序,用于将它们作为变量声明的一部分创建)或作为更大表达式的一部分(称为数组创建表达式).
你仍然可以创建它们:
x = new int[] { 1, 2, 3 }.GetLength(0);
Run Code Online (Sandbox Code Playgroud)
因此,在那里,new int[] { 1, 2, 3 }是数组创建表达式,而{ 1, 2, 3 }部分是数组初始化器.
数组创建表达式在C#5规范的7.6.10.4节中描述,数组初始化器在12.6节中描述.
您引用的语法是对象集合初始值设定项.在初始化不同类型的实例时很有用.它本身不会创建给定类型的实例.
例如,您可以使用它来声明数组:
int[] nums = new int[] { 1, 2, 3 };
Run Code Online (Sandbox Code Playgroud)
列表:
List<int> nums = new List<int> { 1, 2, 3 };
Run Code Online (Sandbox Code Playgroud)
字典:
Dictionary<string, int> pairs = { { "One", 1 }, { "Two", 2 }, { "Three", 3 } };
Run Code Online (Sandbox Code Playgroud)
您仍然可以使用更多代码来内联以实现初始意图:
new[] { 1, 2, 3 }.GetLength(0);
Run Code Online (Sandbox Code Playgroud)