C#学习笔记05-
一.枚举
当变量的取值范围是固定的几个时, 就可以使用枚举类型, 这样会更加简洁方便
1.1.定义:
访问修饰符 enum 枚举类型名 { 成员1, 成员2, 成员3, ... } public enum Days { Mon = 1, Tue, Wed, Thu, Fri, Sat, Sun }
-
enum: 是枚举的关键字;
-
Days 枚举类型名;
-
Mon, Tue, Wed,...是枚举成员变量 枚举类型赋值只能是成员变量;
-
枚举的默认值是从0开始的, 可以人为改变 以下个会在上一个的基础上默认加1;
1.2.枚举的使用
语法格式: 枚举类型 枚举变量名 = 枚举类型.枚举值: Days date = Days.Sun; Console.WriteLine(date); // Sun 如果想要得到 成员变量对应的数字 可以进行一个强制类型转换 Console.WriteLine((int)date); // 7
注意:
-
当给枚举变量赋值时, 其值只能通过枚举类型名加点运算符, 从定义的枚举类型后面的{}里面选取, 故枚举类型限制了枚举变量的取值, 因此在编程过程中, 使用枚举类型可以让我们的数据保持统一.
-
系统会给枚举值赋一个默认的int类型的值, 第一个枚举值是0, 后面的枚举值所对应的int 值依次加1; 故枚举类型本质上也是个int类型的值, 可以在int 类型和枚举类型之间进行转换, 转换时需要使用强制类型转换符;
类型转换
-
字符串转换枚举类型 Days date = (Days)Enum.Parse(typeof(Days), Console.ReadLine());
-
枚举类型成员转换成字符串 string str = Enum.GetName(typeof(Days), date);
-
枚举转换为int类型 int date3 = (int)Days.Sat;
-
整型转换为枚举类型 Days date1 = (Days)Enum.ToObject(typeof(Days), 1); / Days date2 = (Days)1;
二.结构体
结构体: 存放多个数据类型的容器 (数据类型可以不相同)
2.1.定义格式:
访问修饰符 struct 结构体类型名 { 访问修饰符 数据类型 变量名; 访问修饰符 数据类型 变量名; ... } public enum Gender { M, W } public StudentInfo { public string name; public int age; public Gender sex; }
注意:
-
struct 是关键字, 用来定义一个结构体类型;
-
struct 后面才是类型名, 类型名的每个单词首字母都要大写;
-
结构体里面每个变量都是结构体类型StudentInfo的一个成员, 简称位成员变量;
-
结构体里面的成员变量只声明, 不赋值, 需要使用结构体变量来给其成员变量赋值;
-
每个成员变量前面暂时使用public 关键字来修饰, public 是访问修饰符, 成员变量前面只有使用public修饰, 才可以在结构体外面被直接调用赋值.
2.2.结构体的使用
基本操作

说明:
-
使用结构体变量加上点运算符, 点出结构体中 public 修饰的成员, 然后再根据成员的数据类型给成员赋值;
-
结构体变量做为一个整体不能直接参与运算, 需要使用变量包含的某个成员进行运算;
2.3.结构体数组
如上, 创建好结构体之后我们定义了两个对象, 然后用cw输出; 试想, 如果我们定义的对象有一百一千个, 当我们想要输出这些对象的数据时候我们就得打一百一千行代码, 这样一来代码就会很繁琐. 如何优化呢? 我们可以用一个数组来存储定义的各个对象, 然后就可以通过对数组的遍历 仅仅写一个for/foreach 来取得数值.

注意:
1.在定义数组的时候. 因为我们每个元素都是结构体类型的, 所以数组的类型也必须要是结构体类型的!
2.item 得到的是数组元素, 而每个元素都是一个结构体, 因此不能直接把item打印出来;
2.4 结构体数组的排序
例如: 我们有一个结构体里面学生的基础信息, 定义一个结构体类型的数组来存放n个学生的信息, 现在想要对该数组进行一个排序, 按照学生年龄的升序进行.
