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

news2024/9/22 3:54:00

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.coloradmin.cn/o/2101626.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git学习尚硅谷(002 git常用命令)

尚硅谷Git入门到精通全套教程&#xff08;涵盖GitHub\Gitee码云\GitLab&#xff09; 总时长 4:52:00 共45P 此文章包含第8p-第p15的内容 文章目录 git常用命令设置用户签名初始化本地库查看本地库状态添加暂存区提交本地库日志查看修改文件版本穿梭 git常用命令 设置用户签名…

视频集中存储智能边缘计算网关软硬一体机智能边缘计算网关应用场景

在信息化飞速发展的今天&#xff0c;数据处理的速度和效率直接影响到各行各业的运作和发展。传统的云计算模式虽然强大&#xff0c;但在面对实时性和带宽要求越来越高的应用场景时&#xff0c;往往显得力不从心。此时&#xff0c;智能边缘计算网关的出现&#xff0c;为我们带来…

源代码怎么加密防泄漏?9种方法教会你

想做源代码加密防止泄漏&#xff0c;首先要了解程序员可以通过哪些方式将源代码传输出去&#xff01; 程序员泄密的常见方式 物理方法&#xff1a; — 网线直连&#xff0c;即把网线从墙上插头拔下来&#xff0c;然后和一个非受控电脑直连; — winPE启动&#xff0c;通过光盘…

pikachu文件包含漏洞靶场攻略

1.File inclusion(local)&#xff08;本地文件包含&#xff09; 步骤一&#xff1a;选择一个球员提交 步骤二&#xff1a;filename后面输入../../../../shw.php访问php文件 2.File Inclusion(remote)&#xff08;远程文件包含&#xff09; 步骤一&#xff1a;修改配置 远程包…

网吧业务安全对抗(有源码)

网吧业务竞争激烈&#xff0c;网吧都会有以下系统软件。 无盘: 无盘是指没有硬盘。好处是统一维护管理和节约成本。本人研究无盘好几年&#xff0c;后面会专门发帖介绍。 计费: 是指收费系统。 营销软件: 包括销售饮品、‌零食和向客户发送电子邮件营销和短信营销等。产品如…

银行资本种类

一、账面资本&#xff08;会计资本&#xff09; 账面资本又称为会计资本&#xff0c;是指商业银行持股人的永久性资本投入&#xff0c;即出资人在商业银行资产中享有的经济利益&#xff0c;其金额等于资产减去负债后的余额&#xff0c;包括实收资本或普通股、资本公积、盈余公…

【C++第十六章】多态

【C第十六章】多态 定义&#x1f9d0; 多态通俗来说&#xff0c;就是多种形态&#xff0c;我们去完成某个行为时&#xff0c;不同对象完成时会产生出不同的状态。比如游乐园中&#xff0c;1.2米以上买票就需要买成人票&#xff0c;1.2米以下就可以买儿童票。 多态是在不同继承…

Spring之整合Mybatis底层源码解析

整合核心思路 由很多框架都需要和Spring进行整合&#xff0c;而整合的核心思想就是把其他框架所产生的对象放到Spring容器中&#xff0c;让其成为Bean。 ​ 比如Mybatis&#xff0c;Mybatis框架可以单独使用&#xff0c;而单独使用Mybatis框架就需要用到Mybatis所提供的一些类…

ctfshow之文件包含(web78~web86)

web78 if(isset($_GET[file])){$file $_GET[file];include($file); }else{highlight_file(__FILE__); } 解法一&#xff1a;data伪协议 ?filedata://text/plain,<?php system("tac flag.php"); 解法二&#xff1a;php:filter伪协议 ?filepHp://FilTer/conver…

数理天地杂志数理天地杂志社数理天地编辑部2024年第12期目录

基础精讲 “瓜豆模型”与动点问题探析 明倩妤; 2-3 二次函数参数取值范围常见题型分析 邹纯; 4-5 基于数形结合思想的初中数学解题实践——以初中函数问题为例 李玉平; 6-7 旋转思想在构造全等三角形中的渗透 赵兴燕; 8-9 初中数学“一元一次方程”试题设计…

作业0903

1.封装栈 #include <iostream>using namespace std;class myStack { private:int size; // 大小int capacity;int *ptr;int top; // 栈顶下标 public:// 无参构造函数myStack():size(0), top(-1), capacity(10) {ptr new int[capacity];}// 有参构造函数myStack(in…

【数据结构】你真的了解栈和队列吗?

文章目录 1. 栈1.1 概念与结构1.2 栈的实现 2. 队列2.1 概念与结构2.2 队列的实现 3. 栈和队列的算法题3.1 有效的括号3.2 用队列实现栈3.3用栈实现队列3.4 设计循环队列 4. 结语 1. 栈 1.1 概念与结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插…

.hackme靶机通关攻略

第一步查找ip 通过御剑扫描到IP进入尝试 成功找到靶场 步骤二来到这个靶场注册登录 进来点一下提交出来书名 只有一个框框那就来试试sql注入 1’ and 12 -- 然后查看数据库 -1 union select database(),2,3 # 查看数据库表名 -1 union select group_concat(table_name),2…

Java面试题精选:消息队列(三)

1、RabbitMQ中的vhost起什么作用&#xff1f; &#xff08;1&#xff09;vhost本质上就是一个mini版的mq服务器&#xff08;虚拟消息服务器&#xff09;。 有自己的队列、交换器和绑定&#xff0c;最重要的&#xff0c;拥有独立的权限机制&#xff0c;可以做到vhost范围的用户…

VoxEdit 比赛|创作农场灵感资产

为大家带来另一场 VoxEdit 迷你比赛&#xff01;在一周时间内创建可用资产&#xff01; 主题&#xff1a;踏入农场世界&#xff0c;使用 VoxEdit 创建农场主题资产。 从古朴的农舍到可爱的鸡舍&#xff0c;甚至是充满胡萝卜的农田。 你将专注于捕捉农场生活的精髓&#xf…

计算机毕业设计Spark+PyTorch知识图谱中药推荐系统 中药数据分析可视化大屏 中药爬虫 机器学习 中药预测系统 中药情感分析 大数据毕业设计

创新点&#xff1a;知识图谱、大数据虚拟机、可视化大屏、python爬虫、lstm深度学习情感分析、sparkhadoophive离线计算实时计算全部实现、前后台完整、支付宝沙箱支付、短信、AI识别、4-20种推荐算法、中药价格机器学习预测算法等上百种创新点 开发技术&#xff1a;spark hiv…

如何从 Bak 文件中恢复 SQL数据库?(3种方法)

如何从 .bak 文件恢复 SQL数据库&#xff1f; 在数据库管理和维护过程中&#xff0c;数据的安全性和完整性至关重要。备份文件&#xff08;.bak 文件&#xff09;是 SQL Server 中常用的数据库备份格式&#xff0c;它包含了数据库的完整副本&#xff0c;用于在数据丢失、系统故…

在线思维导图怎么快速绘制?5个软件帮助你绘制思维导图不求人

在线思维导图怎么快速绘制&#xff1f;5个软件帮助你绘制思维导图不求人 在线绘制思维导图是整理思路、计划项目、或者学习新知识的绝佳方式。通过使用专门的软件和工具&#xff0c;你可以快速、便捷地创建出清晰的思维导图。以下是五款在线思维导图工具&#xff0c;可以帮助你…

惠中科技PV-Wiper全自动光伏组件清洁系统:智能清洁赋能光伏产业

在全球绿色能源转型的浪潮中&#xff0c;光伏产业作为清洁能源的重要支柱&#xff0c;正以前所未有的速度发展。然而&#xff0c;光伏组件的清洁维护问题一直是制约其发电效率与使用寿命的关键因素。针对这一挑战&#xff0c;惠中科技凭借其深厚的行业积累和技术创新实力&#…