首页 > 代码库 > 第三部分 基本类型:第15章 数组

第三部分 基本类型:第15章 数组

派生关系:
System.Object => System.Array => 数组

数组是引用类型,是在托管堆上进行分配的。

Int32[] myIntegers;          //声明了一个数组引用,初始设置为nullmyIntegers = new Int32[100]; //创建了含有100个Int32的数组,初始化为0。该数组的内存块地址被返回并保存到myIntegers变量中


创建引用类型数组:

Control[] myControls;          //声明一个数组引用myControls = new Control[150]; //创建含有50个Control引用的数组,分配含有50个Control引用的一个数组,这些引用全部被初始化为null。

 

 

创建多维数组:

//创建二维数组,由Double值构成Double[,] myDoubles = new Double[10,20];//创建三维数组,由String引用构成String[,,] myStrings = new String[5,3,10];

 

CLR支持交错数组(jagged array),即由数组构成的数组。
如何创建多边形数组,每个多边形由一个Point实例数组构成:

//创建含有Point数组的一维数组Point[][] myPolygons = new Point[3][];//myPolygons[0]引用一个含有10个Point实例的数组myPloygons[0] = new Point[10];//myPolygons[1]引用一个含有20个Point实例的数组myPolygons[1] = new Point[20];//myPloygons[2]引用一个含有30个Point实例的数组myPloygons[2] = new Point[30];//显示第一个多边形中的Pointfor(Int32 x=0;x < myPloygons[0].Length; x++){Console.WriteLine(myPloygons[0][x]);}

 

 

16.1 初始化数组元素


String[] name = new String[]{"Aidan","Grant"}; //大括号中以逗号分隔的数据项称为数组初始化器,每个数据项都可以是一个任意复杂度的表达式。

语法糖简写:
String[] names ={"Aidan","Grant"};
但不允许写成:
var names ={"Aidan","Grant"};  //需要编译器做的太多了,所以报错

可利用C#的隐式类型的数组功能让编译器推断数组元素的类型:
下面代码没有在new和[]之间指定类型:

var names = new[]{"Aidan","Grant",null}; //null可转型为任意引用类型(包括String),所以推断为String类型

//使用C#的隐式类型的局部变量和隐式类型的数组功能:(错误)

var names = new[] {"Adia","Grant",123}; //报错:找不到隐式类型数组的最佳类型,因为string和int32共同基类是Object,所以不得不创建Object引用的数组,然后对123进行装箱。C#团队认为装箱代价高昂,所以编译报错。

 

“隐式类型的数组”如何与“匿名类型”和“隐式类型的局部变量”组合使用:

//使用C#的隐式类型的局部变量、隐式类型的数组和匿名类型功能:var kids = new[]{new {Name="Aian"},new {Name="Crant"}};
//示例用法(用了另一个隐式类型的局部变量):foreach(var kid in kids){  Console.WriteLine(kid.Name);}