【从零开始入门unity游戏开发之——C#篇57】C#补充知识点——C#9 记录类型(Records)与模式匹配详解

server/2025/2/12 6:19:19/

考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇

  • 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、流程控制、面向对象等,适合没有编程基础的同学入门。
  • unity通用篇】:主要讲解unity的基础通用的知识,包括unity界面、unity脚本、unity资源管理、unity动画、unity摄像机等,适合unity初学者入门。
  • unity3D篇】:主要讲解unity3D的知识,unity3D角色、unity3D物理系统、unity3D光照等,适合只想做2D游戏的开发者学习。
  • unity2D篇】unity2D篇:主要讲解unity2D的知识,包括unity2D角色、unity2D物理系统、unity2D光照等,适合只想做3D游戏的开发者学习。

这样方便大家按需选择性的去学习,比如有编程基础的大概率可以直接从unity通用篇开始入门,没有编程基础的建议从C#篇开始学习。只想做2D游戏的话,可以直接从unity2D篇开始学习,3D篇大概率就不需要看了,节约学习时间成本。

文章目录

    • **C# 记录类型(Records)与模式匹配详解**
      • **一、记录类型(Records)**
        • **1. 什么是记录类型?**
        • **2. 记录类型的特点**
        • **3. 如何定义和使用记录类型?**
          • **步骤 1:定义记录类型**
          • **步骤 2:创建实例**
          • **步骤 3:使用 `with` 表达式**
          • **步骤 4:解构属性**
        • **4. 记录类型与模式匹配**
          • **示例:`switch` 表达式匹配**
      • **二、改进的模式匹配**
        • **1. 逻辑模式(`and`、`or`、`not`)**
          • **示例 1:`and` 和 `not`**
          • **示例 2:`or`**
        • **2. 属性模式**
          • **示例:匹配特定属性**
        • **3. 位置模式**
          • **示例:解构记录类型**
        • **4. 类型模式与 `var` 模式**
      • **三、部分类与部分方法的正确使用**
        • **1. 部分类(`partial class`)**
          • **示例:拆分文件**
        • **2. 部分方法(`partial method`)**
          • **示例:可选日志头**
      • **四、总结**
        • **记录类型的优势**
        • **模式匹配的改进**
        • **适用场景**
  • 专栏推荐
  • 完结

C# 记录类型(Records)与模式匹配详解

一、记录类型(Records)

1. 什么是记录类型?

记录类型(record)是 C# 9.0 引入的一种特殊引用类型,专门用于表示不可变的数据对象。它简化了数据传输对象(DTOs)的定义,自动生成常用方法(如 ToStringEquals),并支持模式匹配。

2. 记录类型的特点
  • 不可变性:创建后属性不可修改。
  • 简洁语法:一行代码即可定义。
  • 自动生成方法ToStringEqualsGetHashCode 等。
  • with 表达式:基于现有实例创建新实例。
  • 解构支持:轻松提取属性值。

3. 如何定义和使用记录类型?
步骤 1:定义记录类型
public record Person(string FirstName, string LastName);
  • 使用 record 关键字定义,属性默认不可变。
步骤 2:创建实例
var person1 = new Person("John", "Doe");
  • 和普通类一样使用构造函数。
步骤 3:使用 with 表达式
var person2 = person1 with { LastName = "Smith" };
  • 生成新实例,仅修改指定属性。
步骤 4:解构属性
var (firstName, lastName) = person1;
Console.WriteLine($"

http://www.ppmy.cn/server/166978.html

相关文章

接口测试Day12-持续集成、git简介和安装、Gitee远程仓库、jenkins集成

持续集成 概念: 团队成员将自己的工作成果,持续集成到一个公共平台的过程。成员可以每天集成一次,也可以一天集成多 次。 相关工具: 本地代码管理:git远程代码管理:gitee(国内)、github(国外)、gitlib(公司…

C++性能优化—AI润色版

上接《C性能优化—人工底稿版》 C性能优化深度解析:从编码技巧到硬件协同 "过早优化是万恶之源" —— Donald Knuth 但合理的性能优化是优秀C工程师的核心能力。本文从编码实践到硬件原理,系统梳理C性能优化的知识体系。 一、性能优化的哲学…

【ThreeJS Basics 1-3】Hello ThreeJS,实现第一个场景

文章目录 环境创建一个项目安装依赖基础 Web 页面概念解释编写代码运行项目 环境 我的环境是 node version 22 创建一个项目 首先,新建一个空的文件夹,然后 npm init -y , 此时会快速生成好默认的 package.json 安装依赖 在新建的项目下用 npm 安装依…

除了重定向,还有其他方法处理未定义路由吗?

是的,除了重定向,处理未定义路由还有其他方法。以下是几种常见的处理方式: 1. 显示404页面而不重定向 你可以直接在路由配置中定义一个 404 路由,并在应用中有条件地显示该页面,而不进行重定向。这种方式允许你在未定…

JUnit5 单元测试详解

目录 一、什么是单元测试,为什么要进行单元测试? 二、JUnit 框架介绍 1.如何引进这些Jar包? 2.如何查看是否引进? ⑴. Project(项目) ⑵. Modules(模块) ⑶. Libraries&#…

python之keyring库:安全密码管理库,不同平台service_name、username的获取

目录 keyring库的基本用法 设置及修改密码 获取密码 删除密码 检索密码 获取当前系统的所有service_name Windows 系统 macOS 系统 Linux 系统 跨平台封装 获取同一service_name下的所有username Windows 系统 macOS 系统 keyring 是一个Python库,它提供了一个简…

ProcessingP5js数据可视化

折线图绘制程序设计说明 可以读取表格数据,并转换成折线图,条形图和饼状图,并设计了衔接动画效果 1. 功能概述 本程序使用 Processing 读取 CSV 文件数据,并绘制带有坐标轴和数据点的折线图。横坐标(X 轴&#xff09…

fps动作系统9:动画音频

文章目录 动画音频创建音频蓝图cue音量乘数 音效衰减衰减空间 绑定到动画动画序列轨道 动画音频 创建音频蓝图 cue 音量乘数 音量大小 音效衰减 空间音效 衰减 空间 绑定到动画 动画序列 轨道 横着的方向是有不同的轨道的,阴影的就是。