我可以使用整数来完成这个任务:
int a;
a = 5;
但是我无法使用整数数组来完成这个操作:
int[] a;
a = { 1, 2, 3, 4, 5 };
为什么不呢?
澄清一下,我不是在寻找正确的语法(我可以查找);我知道这个是有效的:
int[] a = { 1, 2, 3, 4, 5 };
这将相当于:
int a = 5;
我想要理解的是,为什么这段代码在数组上会出错?为什么它无法被识别为有效的代码?我可以使用整数来完成这个任务:
int a;
a = 5;
但是我无法使用整数数组来完成这个操作:
int[] a;
a = { 1, 2, 3, 4, 5 };
为什么不呢?
澄清一下,我不是在寻找正确的语法(我可以查找);我知道这个是有效的:
int[] a = { 1, 2, 3, 4, 5 };
这将相当于:
int a = 5;
我想要理解的是,为什么这段代码在数组上会出错?为什么它无法被识别为有效的代码?int[] a = { 1, 2, 3, 4, 5 };
int[] a;
a = { 1, 2, 3, 4, 5 };
{1, 2, 3, 4, 5}
本身没有意义;它只能出现在两个地方:
As part of an array variable declaration:
int[] a = { 1, 2, 3, 4, 5 };
As part of an array creation expression:
new int[] { 1, 2, 3, 4, 5 }
相反,数字5
在C#中无论出现在哪里都有意义,这就是为什么下面的代码有效:
int a;
a = 5;
int[] arr; for (int i=0; i < 10; i++) { arr = {1,2,3,4,5}; foo(arr); }
是否有意每次循环都创建一个新数组,还是打算创建一个在每个循环迭代中都使用的数组。如果代码执行 arr = new int[] {1,2,3,4,5};
那么很明显每次循环都打算创建一个新对象;任何用于仅创建一次数组的合法语法都需要将其创建从循环中提取出来。 - supercatint
是一个值类型。它是内存中的单个位置,其值可以更改。null
赋给了a
。int[] a;
a = new[] {1, 2, 3, 4, 5};
new[]
。int[] a = {1, 2, 3, 4, 5}; // This will work.
var a = {1, 2, 3, 4, 5}; // This will not.
new[]
。如果您分开声明和初始化,则需要使用new[]
。new
就不能创建新数组。你可以用这种方式 int[] a = {1, 2, 3, 4, 5};
来实现所有操作,而且这并不意味着你没有创建新数组。你不能只用两行来完成它,原因很明显,编译器不支持这样做。 - M.kazem Akhgary{}
语法可用于数组初始化,在声明后不应使用。
要初始化一个数组,你应该尝试这样做:
int[] a = { 1, 2, 3, 4, 5 };
初始化一维数组的其他方法:
int[] a = new int[] { 1, 2, 3, 4, 5 };
int[] a = new int[5] { 1, 2, 3, 4, 5 };
看看这个:不同种类数组的初始化方法