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

时间:2010-12-05 17:32:16

标签: c# arrays new-operator

简单的简短问题

之间的区别究竟是什么?
int[] intarray = new int[2]{1,2};

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

像“新”那样做到底是什么? 你真的需要吗?

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

5 个答案:

答案 0 :(得分:11)

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

以下是等同的:

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

int[] array = { 1, 2 };

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

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

答案 1 :(得分:2)

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

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

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

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

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

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

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

答案 2 :(得分:1)

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

完全相同:

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

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

int i = 12;
double d = i;

与:

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

答案 3 :(得分:0)

这是一种语法糖。

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

答案 4 :(得分:0)

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

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

int i=new int();

OR

int i=0;

是一样的。