《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语句必须嵌套才能遍历交错数组。
数组的协变:当数组元素为引用类型时,如果某个对象存在从自身类型到数组元素类型的隐式或显式转换,支持将这个元素赋值给数组元素。