字典(Dictionary)是一种常用的数据结构,它提供了键值对的存储和访问方式。每个键都必须是唯一的,而值可以重复。
<键的类型,值的类型>
创建一个字典
//创建一个键是string类型,值是int类型的字典
//字典的键一般都建议设置为string类型
Dictionary dic1 = new Dictionary();
向字典中添加数据
dic1.Add("tom", 26);
//注意:同一个字典,如果同一个键已经存在,继续添加不会覆盖,但是会抛出异常
//dic1.Add("tom", 28);
//直接赋值也可以添加
dic1["sonick"] = 18;
从字典中根据键取值
Console.WriteLine(dic1["tom"]); //26
值也可以是引用类型
Dictionary<string, People> dic3 = new Dictionary<string, People>();
People p1 = new People();
p1.Name = "张三";
dic3["zhang"] = p1;
Console.WriteLine(dic3["zhang"].Name); //张三
class People {
public string Name;
}
Remove 删除元素
dic3.Remove("zhang");
TryGetValue 尝试获取与指定键相关联的值。(如果指定的键不存在,它不会抛出异常,而是返回一个指示操作成功与否的布尔值)
if (dic3.TryGetValue("zhang", out People people1)) {
Console.WriteLine("p1 name Is:" + people1.Name);
} else {
Console.WriteLine("p1 name Is not found");
}
遍历出字典中所有的键(Keys)
foreach (var key in dic2.Keys) {
Console.WriteLine($"{key}");
}
遍历出字典中所有的值(Values)
foreach (var value in dic2.Values) {
Console.WriteLine($"{value}");
}
Count 获取字典中键值对的数量
Console.WriteLine(dic1.Count);
ContainsKey 获取字典中是否包含某一个指定的键 返回一个布尔值
Console.WriteLine(dic1.ContainsKey("tmo")); //false
ContainsValue 判断字典中是否包含某一个指定的值
Console.WriteLine(dic1.ContainsValue(26));
Clear 清空字典的内容
dic1.Clear();
结构体(Struct)是一种用户自定义的值类型数据结构。与类(Class)不同,结构体是值类型而非引用类型。
定义一个结构体
struct Books {
//定义数据
public string title;
public string author;
public string subject;
public int book_id;
}
//不使用构造函数就能使用结构体
Books b1;
b1.title = "三体";
b1.author = "刘慈欣";
b1.subject = "aaa";
b1.book_id = 1;
Console.WriteLine(b1.title);
//结构体也有构造函数,目的是为了创建所谓的结构体对象
Books b2 = new Books();
//ValueType 是所有值类型的基类
Console.WriteLine(b2 is ValueType); //true
Console.WriteLine(b2.title); //空
Console.WriteLine(b2.book_id); //0
使用构造函数来完成结构体的初始化传参操作
struct Student {
//结构体使用修饰符,如果不写修饰符默认情况下是internal
public string name;
public int age;
//public Student1() { } //结构体不支持无参构造函数
public Student(string n, int a) {
this.name = n;
this.age = a;
}
static Student() { //静态构造函数不支持访问修饰符
Console.WriteLine("静态构造函数被调用了");
}
//不能声明析构函数
//~Student() { }
}
Student s1 = new Student();
Console.WriteLine(s1.name); //空
Console.WriteLine(s1.age); //0
Student s2 = new Student("郭贝贝", 18);
Console.WriteLine(s2.name); //郭贝贝
Console.WriteLine(s2.age); //18
大多数时候结构体都是用来传参或者当返回值使用
static void Fn(Student stu) {
Console.WriteLine("这是使用结构体作为参数的show方法:" + stu.name + stu.age);
}
static Student Show() {
Console.WriteLine("需要返回一个结构体数据");
return new Student("李四", 55);
}
Fn(s2);
Student s3 = Show();
Console.WriteLine(s3.name);
1.结构体是值类型,类是引用类型
2.结构体存储再栈里,类存储在堆里
3.结构体成员不能使用protected,而类可以
4.结构体成员变量声明时不能指定初始值,而类可以
5.结构体不能声明无参构造函数,而类可以
6.结构体声明有参构造函数时,无参构造函数不会被定调
7.结构体不能声明析构函数,而类可以
8.结构体不能被继承,而类可以
9.结构体需要在构造函数中初始化所有的成员变量,否则会报错,而类可以
10.static不能用来修饰结构体,(不存在静态结构体),而类可以
枚举是一种特殊的值类型,用于定义一组命名的常量。枚举类型允许程序员定义一个具有一组已命名值的新数据类型。每个枚举成员都有一个相关联的整数值,默认情况下从0开始自增。
定义枚举
public enum Sex { //和类平级的枚举叫做平级枚举
male = 2,//男
female//女
}
使用枚举
Sex sex = Sex.male;
//枚举是可以转换对应的整型
int sexValue = (int)sex; //使用了强制转换
Console.WriteLine(sexValue);
public class MyClass {
enum MyEnum {
chifan,
shuijiao,
xuexi,
gouwu,
lvyou
}
//自定义枚举范围,根据上一个值递增
enum MyEnum2 {
chifan,
shuijiao = 3,
xuexi = 5,
gouwu = 10000,
lvyou //此处的值就为10001
}
public static void Test() {
//枚举也存在默认值,默认是0
MyEnum2 enum2 = new MyEnum2();
Console.WriteLine(enum2); //chiffan
}
}
MyClass.Test();