使用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;
是一样的。