这两个数组声明有什么区别?

时间:2011-08-01 21:06:18

标签: c# syntax

看来这两个声明是一样的:

int[] array1 = {11, 22, 33};

int[] array2 = new int[] {11, 22, 33};

但是第二个样本中这个部分new int[]的需求是什么? 它有所不同吗?

5 个答案:

答案 0 :(得分:11)

在这种情况下没有区别 - 但在声明变量时,第一种语法只有 可用。从C#4规范部分12.6:

  

可以在字段声明,局部变量声明和数组创建表达式中指定数组初始值设定项。

(“数组初始值设定项”是括号中的位 - 数组创建表达式是指定new int[]或其他任何内容的形式。)

当你没有声明局部变量或字段时(例如,如果你将参数传递给方法)你必须使用第二种形式,或者从C#3.0你可以使用隐式类型数组:

Foo(new[] { 1, 2, 3} );

答案 1 :(得分:2)

没有区别。它们都是一样的。

答案 2 :(得分:1)

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 on initializing arrays

答案 3 :(得分:1)

由于您要在声明的同一行中提供初始值设定项,因此您可以省略新运算符。

//这没关系

int [] i32Array = {1,2,3,4,5};

//这不是

int [] i32Array; i32Array = {1,2,3,4,5};

如果你的定义和启动发生在不同的行,你将不得不这样做

i32Array = new int [] {1,2,3,4,5};

因此,从技术上讲,可以在没有初始化的情况下声明数组变量,但是在为此变量分配数组时必须使用new运算符

答案 4 :(得分:1)

两者完全相同

看一下这段代码:

int[] arr1={1,2,3,4};
int[] arr2= new int[]{1,2,3,4};

使用反射器将两者转换为以下内容:

int[] expr_07 = new int[]
            {
                1, 
                2, 
                3, 
                4
            };
            int[] expr_19 = new int[]
            {
                1, 
                2, 
                3, 
                4
            };