一、C#数组简介

数组从字面上理解就是存放一组数,但在 C# 语言中数组存放的并不一定是数字,也可以是其他数据类型。

数组的特点在一个数组中存放的值都是同一数据类型的。数组中某个指定的元素是通过索引来访问的。

所有的数组都是由连续的内存位置组成的。

数组从零开始建立索引,即数组索引从零开始。

二、一维数组

一维数组在数组中最常用,即将一组值存放到一个数组中,并为其定义一个名称,通过数组中元素的位置来存取值。

定义一维数组的语法形式如下:

  1. //定义数组
  2. 数据类型[] 数组名;

  1. 数据类型[] 数组名 = { 1, 2, ...}
  2. 数据类型[] 数组名 = new 数据类型[长度]{ 1,值 2,...}

举例如下:

  1. //定义 int 类型的数组
  2. int[] a = {1,2,3};
  3. //输岀数组中的一个元素
  4. Console.WriteLine(a[0]);
  5. //输出数组中的最后一个元素
  6. Console.WriteLine(a[a.Length1]);

三、多维数组

多维数组是指二维或二维以上的数组。一般我们最常用的是二维数组。定义多维数组的语法形式如下。

  1. //定义多维数组
  2. 数据类型[ , , ...] 数组名;

  1. //创建多维数组并初始化
  2. 数据类型[ , , ...] 数组名 = new 数据类型[m,n,...]

{{ , ,

...},{

,

,

...}};

从上面定义的语法可以看出,它与一维数组的定义非常类似,每多一个维度则在定义时的[] 中增加一个“,”。存取数组中的值也是将下标用“,”隔开。多维数组初始化:

  1. //若不指定初始值,那么每个元素编译器会提供默认值0
  2. int[,] arr = new int[2, 2];

3

  1. //若指定初始值,那么必须每个元素都要指定。
  2. int[,] arr = new int[2, 2] { { 2, 3 }, { 4, 5 } };

6

  1. //指定初始值后,长度可以省略,编译器会自动进行推算。
  2. int[,] arr = new int[, ] { { 2, 3 }, { 4, 5 } };

四、foreach遍历

foreach 循环用于列举出集合中所有的元素,foreach 语句中的表达式由关键字 in 隔开的两个项组成。 in 右边的项是集合名,in 左边的项是变量名,用来存放该集合中的每个元素。

该循环的运行过程如下:每一次循环时,从集合中取出一个新的元素值。放到只读变量中去,如果括号中的整个表达式返回值为 true,foreach 块中的语句就能够执行。

一旦集合中的元素都已经被访问到,整个表达式的值为 false,控制流程就转入到 foreach 块后面的执行语句。具体的语法形式 如下:

  1. foreach(数据类型 变量名 in 数组名)
  2. {
  3. //语句块;
  4. }

注意:foreach 语句仅能用于数组、字符串或集合类数据类型。举例如下:使用foreach遍历上一节中的数组

1 static void Main(string[] args)

  1. {
  2. int[,] arr = new int[2, 2] { { 2, 3 }, { 4, 5 } };

4

  1. foreach(int item in arr)
  2. {
  3. Console.WriteLine(item);
  4. }
  5. }

五、字符串分割

Split 方法用于按照指定的字符串来拆分原有字符串,并返回拆分后得到的字符串数组。

比如有一个字符串 “张三、李四、王五、赵六”,如果想将其分割成单独的字符串,此时就可以使用string类的split方法。

举例如下:

  1. static void Main(string[] args)
  2. {

3

4 string str = "张三、李四、王五、赵六";

5

6 string[] strarr = str.Split('');

7

  1. foreach (string item in strarr)
  2. {
  3. Console.WriteLine(item);
  4. }
  5. }

六、结构体类型

结构体类型是一种自定义值类型,与类比较相似。由于结构体类型是值类型,在使用时会比使用类存取的速度更快,但灵活性方面没有类好。

定义语法:

  1. 访问修饰符 struct 结构体名称
  2. {
  3. //结构体成员
  4. }

其中:

  1. 访问修饰符

通常使用 public 或者省略不写,如果省略不写,代表使用 internal来修饰。

如果结构体中的内容要被其他类中的成员访问,需要将其访问修饰符设置为 public。

  1. 结构体名称

命名规则通常和类的命名规则相同,即每个单词的首字母大写。

  1. 结构体成员

包括字段、属性、方法以及事件等。但无法进行初始化操作。

在结构体中也能编写构造器,但必须带参数,并且必须为结构体中的字段赋初值。

结构体和类的区别如下表:

结构体

允许不使用new对其实例化

必须使用new实例化

没有默认构造方法

有默认构造方法

不能继承类

能继承类

不允许使用abstract、protected以及sealed修饰

允许使用abstract、protected以及sealed修饰

举例如下:

    1. /// <summary>
    2. /// 自定义结构体
    3. /// </summary>
    4. struct S1
    5. {
    6. public int num;
    7. }

8

    1. class Program
    2. {
    3. static void Main(string[] args)
    4. {
    5. S1 s;
    6. s.num = 5;
    7. ChangeValue(s);

16

    1. Console.WriteLine("修改之后的值(加1):{0}", s.num);
    2. }

19

    1. public static void ChangeValue(S1 s)
    2. {
    3. s.num++;
    4. }
    5. }

七、枚举类型

C#枚举类型和结构体类型都是特殊的值类型,应用也比较广泛。

枚举类型在定义时使用 enum 关键字表示,枚举类型的定义与类成员的定义是一样的,或者直接定义在命名空间中。定义枚举类型的变量的语法形式如下:

  1. 访问修饰符 enum 变量名 : 数据类型
  2. {
  3. l,
  4. 2,
  5. }

其中:

  1. 访问修饰符与类成员的访问修饰符一样,省略访问修饰符也是代表使用 private 修饰符的。
  2. 数据类型指枚举中值的数据类型。只能是整数类型,包括 byte、short、int、long 等。
  3. 值1、值2、……在枚举类型中显示的值。但实际上每个值都被自动赋予了一个整数类型值,并且值是递增加

1 的,默认是从 0 开始的,也就是值 1 的值是 0、值 2 的值是 1。

如果不需要系统自动为枚举值指定值,也可以直接为其赋一个整数值。

34

 break;

35

 case WeekEnum.TUE:

36

 Console.WriteLine("周二上课");

37

 break;

38

 case WeekEnum.WED:

39

 Console.WriteLine("周三上课");

40

 break;

41

 case WeekEnum.THU:

42

 Console.WriteLine("周四上课");

43

 break;

44

 case WeekEnum.FRI:

45

 Console.WriteLine("周五上课");

46

 break;

47

 case WeekEnum.SAT:

48

 Console.WriteLine("周六休息");

49

 break;

50

 }

51

 }

52

}

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐