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

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

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