《Illustrated C# 2012, 4th Edition》Daniel M. Solis 第12章 数组 笔记

数组的维度称作秩(rank)。
C#有两种多维数组:矩形数组(rectangular array)和交错数组(jagged array)。

  • 矩形数组:int x = mayArray2[4, 6, 1]
  • 交错数组:jagArray1[2][7][4]

数组继承自System.Array。System.Array提供了很多属性和方法:

数组声明时,只确定数组的维度。
维度长度不是数组类型的一部分,维度长度在数组实例化时才确定。
与C/C++不同,方括号写在类型后,而不是变量名后。

数组实例化时同样使用new关键字,但不使用圆括号。
数组实例化,元素被初始为元素类型的默认值。
数组支持使用初始化列表初始化,由编译器推断维度长度。

int[] intArr = new int[] {10, 20, 30, 40}; // int[4]
int[, ] intArray2 = new int[, ] { {10, 1}, {20, 2}, {30, 3} };  // int[3, 2]

如果在声明时初始化数组,C#提供了快捷语法和隐式类型数组(由编译器推断元素类型):

交错数组初始化时,只能确定顶层维度长度:

int[][] jagArr = new int[3][];

在CIL中,一维数组特定的性能优化指令,因此使用一维数组的交错数组,有时性能比矩形数组性能更好。

foreach语句中,迭代变量是只读的,可以使用var关键字声明。
foreach语句必须嵌套才能遍历交错数组。

数组的协变:当数组元素为引用类型时,如果某个对象存在从自身类型到数组元素类型的隐式或显式转换,支持将这个元素赋值给数组元素。