Unity面向对象补全计划 之 List<T>与class(非基础)

news/2024/11/14 12:40:04/

C# & Unity 面向对象补全计划 泛型-CSDN博客

关于List,其本质就是C#封装好的一个数组,是一个很好用的轮子,所以并不需要什么特别说明

问题描述

假设我们有一个表示学生的类 Student,每个学生有姓名和年龄两个属性。我们需要创建一个学生列表,并实现以下功能:

  1. 添加学生到列表中
  2. 打印所有学生的信息(需要重写Tostring)
  3. 查找特定姓名的学生并打印其信息

 解决思路

用一个List来保存每一个学生的信息

        1.用List.Add方法添加学生

        2.用foreachi遍历打印

        3.用Find查找

数据图解

也就是说list<student> s

其中s[n]代表了一个个的student对象,而s[n].name,s[n].age才是我们要的数据,莫要搞混了

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Student : MonoBehaviour
{public string Name { get; set; }public int Age { get; set; }public Student(string name, int age){Name = name;Age = age;}public override string ToString(){return $"Name: {Name}, Age: {Age}";}
}

管理类一览 

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;public class StudentManager : MonoBehaviour
{List<Student> ss;private void Awake(){ss = new List<Student>();//添加ss.Add(new Student("张三",10));ss.Add(new Student("李四", 15));//遍历foreach (Student temp in ss){Debug.Log(temp);}//查找string tempName1 = "张三";//注意下面这行我声明了一个临时的对象存储需要找到对象//Find可以传入函数所以我就使用了一个lambda表达式Student foundStudent1 = ss.Find((value)=>value.Name == tempName1);//其等价于//students.Find(delegate (Student s) {//    return s.Name == tempName1;//});if (foundStudent1 != null)        {Debug.Log($"已找到该学生{foundStudent1}");}else{Debug.Log($"未找到该学生{tempName1}");}}
}

注意事项:

添加和遍历并不难,查找需要特别说明一点,这里我用的Find甚至直接传入的lambda表达式

因为思路如下:

为什么不用Contains对比呢? 

Contains 方法依赖于 Equals 方法和 GetHashCode 方法来判断列表中是否包含某个对象,如果非要用Contains 来写的话,就需要像下面这样重写这两个函数

    public override bool Equals(object obj){if (obj == null || GetType() != obj.GetType())return false;Student other = (Student)obj;return Name == other.Name && Age == other.Age;}public override int GetHashCode(){return HashCode.Combine(Name, Age);}

使用的时候则需要创建一个临时变量,传入要查找的值,还需要实例化一下所以不是太方便了

Student tempName1= new Student("Bob", 22);

http://www.ppmy.cn/news/1520408.html

相关文章

缓存分布式一致性问题

缓存一致性问题发生的原因&#xff0c;是在更新数据时数据库和缓存数据的不一致。我们要做到保证缓存的最终一致性。如果数据需要强一致性建议直接查询数据库。 双写模式 双写模式为先写数据库&#xff0c;在写缓存。 进来两个请求&#xff0c;先执行“请求1”的操作写入数据…

图论----最小生成树讲解与相关题解

目前已更新系列 当前--图论----最小生成树讲解与相关题解 滑动窗口系列算法总结与题解一 算法系列----并查集总结于相关题解 图论---dfs系列 差分与前缀和总结与对应题解&#xff08;之前笔试真的很爱考&#xff09; 数论---质数判断、质因子分解、质数筛&#xff08;埃氏…

Golang 小项目(3)

Golang 小项目(3) 前言 本项目适合 Golang 初学者,通过简单的项目实践来加深对 Golang 的基本语法和 Web 开发的理解。 前往 torna.top 免费查阅 项目结构 D:. ├─ go.mod ├─ go.sum │ ├─cmd │ └─main │ main.go │ └─pkg├─config│ app.go│…

数据库系统 第36节 数据库镜像

数据库镜像&#xff08;Database Mirroring&#xff09;是一种在数据库系统中用于确保数据高可用性和灾难恢复的技术。在MySQL中&#xff0c;虽然它不像SQL Server那样直接支持数据库镜像&#xff0c;但可以通过复制&#xff08;Replication&#xff09;来实现类似的功能。MySQ…

AUTOSAR_EXP_ARAComAPI的5章笔记(2)

返回目录 5.3 Proxy Class Proxy Class从AutoSar元模型的服务接口描述中生成。 ara::com确实标准化了生成的Proxy Class的接口。一个AP产品供应商的工具链将生成一个代理实现类来精确地实现这个接口。 注意: 因为Proxy Class必须提供的接口是由ara::com定义的&#xff0c;所…

anaconda进入环境并查看python版本

conda版本&#xff0c;并新建环境 查看ancaconda有几个环境 一个conda版本可以有很多conda环境&#xff0c;每个conda环境可以安装一个版本的python&#xff0c;和所需要的包&#xff0c;每个环境的包可以不相同。

景联文科技:专业视频标注服务助力计算机视觉应用升级

视频标注是指对视频内容进行分析&#xff0c;并在视频中的特定对象、行为或事件上添加标签的过程。 视频标注包括&#xff1a; 1. 对象检测与跟踪 •对象检测&#xff1a;在每一帧中识别并定位特定的对象&#xff0c;如人、车、动物等。 •对象跟踪&#xff1a;跟踪这些对象…

苹果M4芯片Mac全面曝光 或10月发布

彭博社的马克・古尔曼&#xff08;Mark Gurman&#xff09;发布博文&#xff0c;曝料称苹果内部正在测试 4 款采用 M4 芯片的 Mac 设备&#xff0c;有望今年秋季&#xff08;可能是 10 月&#xff09;发布。 古尔曼表示苹果计划今年升级 MacBook Pro、Mac mini 和 iMac 产品线&…