第十章、使用数组

  数组是无序的元素序列。数组中的所有元素都具有相同的类型。(引用类型)

  声明数组变量

  int [] pins;

  数组元素并非只能使用基本数据类型。数组元素还可以是结构、枚举或者类,例如,为创建由Date结构的数组。

  Date [] dates;

  创建数组实例

  无论元素是什么类型,数组始终都是引用类型

  声明数组变量时不需要指定大小,也不会分配内存(只是将引用存储到栈上)。创建数组实例时才分配内存,数组大小也在这时指定。

  pins = new int[4];

  由于数组实例的内存是动态分配的,所以数组实例的大小不一定是常量;而是可以在运行时计算,例如

  ine size = int.Parse(Console.ReadLine());

  int [] pins = new int[size];

  甚至可以创建大小为0的数组。这虽然听起来有点奇怪,但又是数组大小需要动态决定,而且可以为0,所以这个设计是有意义的。大小为0的数组不是null数组,而是包含0个元素的数组。

  填充和使用数组

  创建数组实例时,所有元素都被初始化为默认值。(如数值初始化为0,对象为null,DateTime为“01/01/000100:00:00”)

  int [] pins = new int[4] {9,3,4,5};

  大括号中的值的数量必须和要创建的数组实例的大小完全匹配

  初始化数组变量时可以省略new表达式和数组大小。编译器将根据初始值的数量来计算大小,并生成代码来创建数组。

  int [] pins = {9,3,4,5};

  创建由结构或对象构成的数组时,可以调用构造器来初始化数组中的每个元素,例如

  Time[] schedule = {new Time(12,30),new Time(5,30)};

  创建隐式类型的数组

  如果在声明数组时指定了初始值列表,就可以让C#编译器自己推断数组元素的类型。

  var names = new [] {"John","Diana","James","Francesca"}

  使用这个语法,必须保证所有初始值都有相同的类型。

  数组作为方法参数和返回类型

  方法可以获取数组类型的参数,也可以把它们作为返回值传递。

  public void ProcessData(int [] data)

  {

  foraech(int i in data)

  {

  .........

  }

  }

  方法要返回一个数组,返回类型必须是数组类型。

  public int[] ReadData()

  {

  ....

  return data;//返回data数组

  }

  复制数组

  要真正复制数组实例,获得堆上的实际数据的拷贝,那么必须做两件事情。首先,必须创建类型和大小与原始数组相同的一个新数组实例,然后将数据元素从原始数组逐个复制到新数组,如下:

  ①

       int [] pins = {1,2,3,4};

  int [] copy = new int[pins.Length];

  for(int i=0;i<copy.length'i++)< p="">

  {

  copy[i] = pins[i];

  }

  ②CopyTo方法将一个数组的内容复制到另一个数组,并从指定的其实索引处开始复制。

  int [] pins = {1,2,3,4};

  int [] copy = new int[pins.Length];

  pins.CopyTo(copy,0);

  ③System.Array的静态方法Copy

  int [] pins = {1,2,3,4};

  int [] copy = new int[pins.Length];

  Array.Copy(pins,copy,copy.Length);

  ④System.Array的实例方法Clone

  int [] pins = {1,2,3,4};

  int [] copy = (int[]pins.Clone);

  多维数组

  二维数组的第一维是表行,第二维是表列。

原文地址:https://www.cnblogs.com/linhuide/p/5819863.html