这两个数组声明有什么区别?
看来这两个声明是一样的:
int[] array1 = {11, 22, 33};
和
int[] array2 = new int[] {11, 22, 33};
但是第二个样本中这部分new int[]
的需求是什么?
它有所不同吗?
在这种情况下没有区别 – 但第一种语法仅在声明变量时可用。 从C#4规范部分12.6:
可以在字段声明,局部变量声明和数组创建表达式中指定数组初始值设定项。
(“数组初始值设定项”是大括号中的位 – 数组创建表达式是指定new int[]
或其他任何内容的forms。)
当您没有声明局部变量或字段时(例如,如果您将参数传递给方法)您必须使用第二种forms,或者从C#3.0开始,您可以使用隐式类型数组:
Foo(new[] { 1, 2, 3} );
没有区别。 它们都是一样的。
int[] array1; // declare array1 as an int array of any size array1 = new int[10]; // array1 is a 10-element array array1 = new int[20]; // now it's a 20-element array int[] array2 = new int[5] {1, 2, 3, 4, 5}; // declare array 2 as an int array of size 5
两者都是一样的。 有关初始化数组的信息,请参阅MSDN。
由于您在声明的同一行中提供初始化程序,因此您可以省略new运算符。
// 还行吧
int [] i32Array = {1,2,3,4,5};
// 这不是
int [] i32Array; i32Array = {1,2,3,4,5};
如果你的定义和启动发生在不同的行,你将不得不这样做
i32Array = new int [] {1,2,3,4,5};
因此,从技术上讲,可以在没有初始化的情况下声明数组变量,但是在为此变量分配数组时必须使用new运算符
两者完全相同
看这段代码:
int[] arr1={1,2,3,4}; int[] arr2= new int[]{1,2,3,4};
使用reflection器,两者都转换为以下:
int[] expr_07 = new int[] { 1, 2, 3, 4 }; int[] expr_19 = new int[] { 1, 2, 3, 4 };