这两种数组声明方式有什么区别?

9

看起来这两个声明是相同的:

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

并且

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

但第二个示例中的 new int[] 部分有什么必要性?
它会有所不同吗?

5个回答

11
在这种情况下没有区别,但第一种语法只适用于声明变量时使用。从C# 4规范的第12.6节中可以看出:数组初始化器可以在字段声明、局部变量声明和数组创建表达式中指定。(“数组初始化器”是花括号中的内容,数组创建表达式是指您指定new int[]或类似形式的内容。)当您不是声明局部变量或字段时(例如,如果您将参数传递给方法),您必须使用第二种形式,或者从C# 3.0开始,您可以使用隐式类型化数组。
Foo(new[] { 1, 2, 3} );

2

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


1

由于您在声明时提供了初始化程序在同一行中,您可以省略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运算符。


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上看这里关于初始化数组


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
            };

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接