C# 这两个数组声明之间有什么区别?

C# 这两个数组声明之间有什么区别?,c#,syntax,C#,Syntax,这两种声明似乎是相同的: int[] array1 = {11, 22, 33}; 及 但是在第二个示例中,这一部分的需求是什么 这有区别吗?没有区别。它们都是相同的。在这种情况下没有区别-但第一种语法仅在声明变量时可用。根据C#4规范第12.6节: 数组初始值设定项可以在字段声明、局部变量声明和数组创建表达式中指定 (数组初始值设定项是大括号中的位,数组创建表达式是指定newint[]或其他形式的形式。) 如果不声明局部变量或字段(例如,如果将参数传递给方法),则必须使用第二种形式,或者从C

这两种声明似乎是相同的:

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

但是在第二个示例中,这一部分的需求是什么
这有区别吗?

没有区别。它们都是相同的。

在这种情况下没有区别-但第一种语法仅在声明变量时可用。根据C#4规范第12.6节:

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

(数组初始值设定项是大括号中的位,数组创建表达式是指定
newint[]
或其他形式的形式。)

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

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

两者都是一样的。请参见此处的MSDN。

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

//这没关系

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

//这不是

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

如果你的定义和开始发生在不同的行中,你将不得不这样做

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


因此,从技术上讲,可以在不初始化的情况下声明数组变量,但是当您将数组分配给该变量时,必须使用new运算符,因为两者完全相同

请看下面的代码:

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