C#基础——字典、结构体和枚举

2023-12-19 21:27:35

1、字典

字典(Dictionary)是一种常用的数据结构,它提供了键值对的存储和访问方式。每个键都必须是唯一的,而值可以重复。

<键的类型,值的类型>

创建一个字典

//创建一个键是string类型,值是int类型的字典
//字典的键一般都建议设置为string类型
Dictionary<string, int> dic1 = new Dictionary<string, int>();

向字典中添加数据

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();

2、结构体

结构体(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不能用来修饰结构体,(不存在静态结构体),而类可以

3、枚举

枚举是一种特殊的值类型,用于定义一组命名的常量。枚举类型允许程序员定义一个具有一组已命名值的新数据类型。每个枚举成员都有一个相关联的整数值,默认情况下从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();

文章来源:https://blog.csdn.net/qq_51810680/article/details/135078951
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。