一.枚举
当变量的取值范围是固定的几个, 例如性别--男,女; 英雄类型 -- 法师, 刺客.战士, 射手等等. 这时就可以使用枚举类型, 会更加简洁方便.
1.1.定义:
访问修饰符 enum 枚举类型名
{成员1,成员2,成员3,...
}public enum Days{Mon = 1,Tue,Wed,Thu,Fri,Sat,Sun}
- enum: 是枚举的关键字;
- Days 枚举类型名;
- Mon, Tue, Wed,...是枚举成员变量 枚举类型赋值只能是成员变量;
- 枚举的默认值是从0开始的, 可以人为改变 以下个会在上一个的基础上默认加1, 例如上例设置了Mon 为1, 那么Tue 就会在 Mon的基础上加1 为2, 以此类推;
1.2.枚举的使用
//语法格式:
枚举类型 枚举变量名 = 枚举类型.枚举值:Days date = Days.Sun;
Console.WriteLine(date); // 结果为 : Sun
//如果想要得到 成员变量对应的数字 可以进行强制类型转换 如下:
Console.WriteLine((int)date); // 结尾为: 7
注意:
- 当给枚举变量赋值时, 其值只能通过枚举类型名加点运算符取得(从定义的枚举类型后面的{}中选择), 故枚举类型限制了枚举变量的取值, 因此在编程过程中, 使用枚举类型可以让我们的数据保持统一.
- 系统会给枚举值赋一个默认的int类型的值, 第一个枚举值是0, 后面的枚举值所对应的int 值依次加1; 故枚举类型本质上也是个int类型的值, 可以在int 类型和枚举类型之间进行转换, 转换时需要使用强制类型转换符;
类型转换
1.字符串转换枚举类型
枚举类型名 枚举变量名 = (枚举类型名)Enum.Parse(typeof(枚举类型名), 字符串);
Days date = (Days)Enum.Parse(typeof(Days), Console.ReadLine());
2. 枚举类型成员转换成字符串
string 变量名 = Enum.GetName(typeof(枚举类型名), 枚举变量名);
string str = Enum.GetName(typeof(Days), date);
3.枚举转换为int类型
int 变量名 = (int)枚举类型名.成员变量;
int day = (int)Days.Sat;
4.整型转换为枚举类型
枚举类型名 枚举变量名 = (枚举类型名)Enum.ToObject(typeof(枚举类型名), 数值);
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 来取得各个对象.
注意:
- 在定义数组的时候. 因为我们每个元素都是结构体类型的, 所以数组的类型也必须要是结构体类型的.
- item 得到的是数组元素, 而每个元素都是一个结构体, 因此不能直接把item打印出来;
2.4 结构体数组的排序
例如: 我们有一个结构体类型学生的基础信息, 定义一个结构体类型的数组来存放n个学生的信息, 现在想要对该数组进行一个排序, 按照学生年龄的升序进行.
=======================================================
思维导图