使用new来初始化c#数组与使用literal初始化

简单简短问题究竟有什么区别

int[] intarray = new int[2]{1,2}; 

 int[] intarray2 = {4,5,6}; 

就像“新”究竟做什么一样? 你真的需要它吗?

我猜它只是分配内存…..或什么? 对不起,我对C#全新,并且在我学习它时会有疑问。

第二个是数组初始化器语法 。 这只是语法糖。 两者都用它们各自的值初始化新的数组实例,第一个是更明确的(你重复它是右边的两个元素的整数数组,这从后面的内容非常明显,因此编译器能够推断出这些信息)。

所以以下是等价的:

 int[] array = new int[2] { 1, 2 }; 

和:

 int[] array = { 1, 2 }; 

和:

 var array = new[] { 1, 2 }; 

在所有情况下,我们都在初始化一个包含两个整数的数组。 我个人更喜欢最后一种语法。

数组是引用类型 ,使用C# new关键字分配,其他引用类型也是如此。

您的一个数组语法只是C#编译器也能识别的更短的语法 – (它上面还有其他变体) 您的示例都为数组实例分配(新)和初始化{elements}

第一个版本明确说明了数组的大小。

 int[] intarray = new int[2]{1,2}; 

第二个版本允许C#编译器通过初始化列表中的元素数来推断数组的大小。

 int[] intarray2 = {4,5,6}; 

通常,C#编译器识别用于声明和初始化C#本机数组的专用语法,以掩盖正在使用基础System.Array类的事实。

 int[] intarray2 = {4,5,6}; 

与以下内容完全相同:

 int[] intarray2 = new int[] {4, 5, 6}; 

只是一种较短(缩写)的编码forms,实际上编译器会为数组分配内存相同的内存数量,第一种不是显式写入“new”,就像你给一个double赋一个整数一样变量,你可以写或不(因为是一个安全的演员),并将产生相同的效果。 例:

 int i = 12; double d = i; 

同样如下:

 int i = 12; double d = (double)i; 

这是一种语法糖。

他们之间没有区别; 他们将编译成相同的IL。
但是,数组初始值只能用于初始化数组字段或属性。

http://msdn.microsoft.com/en-us/library/s1ax56ch.aspx

加。 对此,new将只调用默认构造函数。

 int i=new int(); 

要么

 int i=0; 

是一样的。