先展示一段简单代码

// 定义枚举
public enum thisday
{吃饭,不吃
}// 定义结构体
public struct person
{public string name;public int age;public thisday zhuangtai; // 使用枚举类型作为字段
}static void Main(string[] args)
{// 创建结构体实例person thisperson;thisperson.name = "laowang";thisperson.age = 55;thisperson.zhuangtai = thisday.不吃; // 设置枚举值// 输出结构体内容Console.WriteLine("{0}{1}{2}", thisperson.name, thisperson.age, thisperson.zhuangtai);Console.ReadKey();
}

枚举(Enum)详解

什么是枚举?

枚举是一种特殊的值类型,用于定义一组命名的常量值,提高代码可读性和可维护性。

关键特性:

  1. 强类型:提供类型安全的常量值

  2. 值类型:存储在栈上,效率高

  3. 默认值:第一个元素值为0,后续递增

  4. 可指定值:可以显式指定值

// 显式指定值
public enum StatusCode
{Success = 200,NotFound = 404,ServerError = 500
}// 位标志枚举
[Flags]
public enum Permissions
{None = 0,Read = 1,Write = 2,Execute = 4,All = Read | Write | Execute
}// 使用示例
var currentPermissions = Permissions.Read | Permissions.Write;
Console.WriteLine(currentPermissions.HasFlag(Permissions.Write)); // true

结构体(Struct)详解

什么是结构体?

结构体是一种轻量级的自定义值类型,适合封装小型数据组。

关键特性:

  1. 值类型:存储在栈上(类存储在堆上)

  2. 性能高效:适合小型数据结构

  3. 不支持继承:不能从其他结构体或类继承

  4. 可包含方法:可以定义成员方法

public struct Person
{// 使用属性而不是公共字段public string Name { get; set; }public int Age { get; set; }public ThisDay Status { get; set; } // 使用枚举属性// 结构体构造函数public Person(string name, int age, ThisDay status){Name = name;Age = age;Status = status;}// 结构体方法public void PrintInfo(){Console.WriteLine($"姓名: {Name}, 年龄: {Age}, 状态: {Status}");}
}// 使用构造函数初始化
Person person = new Person("小明", 25, ThisDay.吃饭);
person.PrintInfo();// 修改属性
person.Status = ThisDay.不吃;
person.PrintInfo();

实际应用场景

枚举的典型应用:

  1. 状态表示:如订单状态(待支付, 已发货, 已完成)

  2. 选项配置:如日志级别(Debug, Info, Warning, Error)

  3. 方向控制:如游戏中的移动方向(上, 下, 左, 右)

结构体的典型应用:

  1. 坐标系统:表示2D/3D点

  2. 颜色表示:RGBA颜色值

  3. 性能敏感场景:游戏开发中的位置、旋转等数据

//2d
public struct Point
{public int X { get; set; }public int Y { get; set; }public double DistanceTo(Point other){return Math.Sqrt(Math.Pow(X - other.X, 2) + Math.Pow(Y - other.Y, 2));}
}
//颜色
public struct Color
{public byte R { get; set; }public byte G { get; set; }public byte B { get; set; }public byte A { get; set; }
}

最佳实践

  1. 命名规范

    • 枚举使用单数名词(Permission, DayOfWeek)

    • 结构体使用名词(Point, Rectangle)

  2. 避免大型结构体:当数据超过16字节时,考虑使用类

  3. 不可变性:考虑将结构体设计为不可变类型

总结

结构体和枚举是C#中强大的工具:

  • 枚举使代码更清晰、更安全,避免魔术数字

  • 结构体提供轻量级的数据封装,适合小型数据集

  • 二者结合可以创建高效、类型安全的领域模型

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/93041.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/93041.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/93041.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++-setmap详解

Cset&map 1. 序列式容器和关联式容器 1.1 序列式容器 序列式容器按照线性顺序存储元素,元素的位置取决于插入的时间和位置,与元素的值无关。 主要特点:元素按插入顺序存储可以通过位置(索引)直接访问元素不自动排序…

解决程序连不上RabbitMQ:Attempting to connect to/access to vhost虚拟主机挂了的排错与恢复

前言:在分布式系统里,RabbitMQ作为消息中间件,是服务间通信的关键纽带。但实际使用中,程序连接RabbitMQ失败的情况时有发生。本文结合真实报错,细致呈现从问题发现到解决的完整排错思路,还会深入讲解Rabbit…

K8S中如何配置PDB(Pod Disruption Budget)

1. PDB 核心概念作用:控制自愿中断(如节点升级、缩容)期间,应用的最小可用副本数或最大不可用比例。关键参数:minAvailable:必须保持运行的 Pod 数量(如 2 或 50%)。maxUnavailable&…

从 0 到 1:用 MyCat 打造可水平扩展的 MySQL 分库分表架构

一、为什么要分库分表? 单机 MySQL 的极限大致在:维度经验值单表行数≤ 1 000 万行(B 树三层)单库磁盘≤ 2 TB(SSD)单机 QPS≤ 1 万(InnoDB)当业务继续增长,数据量和并发…

电池模组奇异值分解降阶模型

了解如何将奇异值分解 (SVD) 降阶模型 (ROM) 应用于电池模块热模拟。挑战随着电池模块在电动汽车和储能系统中的重要性日益提升,其热性能管理也成为一项重大的工程挑战。高功率密度会产生大量热量,如果散热不当,可能导致电池性能下降、性能下…

《Python函数:从入门到精通,一文掌握函数编程精髓》

坚持用 清晰易懂的图解 代码语言,让每个知识点变得简单! 🚀呆头个人主页详情 🌱 呆头个人Gitee代码仓库 📌 呆头详细专栏系列 座右铭: “不患无位,患所以立。” Python函数:从入门到…

【记录贴】STM32 I2C 控制 OLED 卡死?根源在 SR1 与 SR2 的读取操作

问题描述最近在复用以前STM32F407控制OLED的代码,移植到STM32F103 上,使用硬件 I2C 通信方式。按照常规流程,先发送 OLED 的从机地址,OLED 有正常应答,但当发送第一个控制命令(0xAE)前的控制字节…

【AI驱动的语义通信:突破比特传输的下一代通信范式】

文章目录1 语义通信简介1.1 基本概念:什么是语义通信?语义通信的核心目标1.2 基本结构:语义通信系统结构语义通信系统的通用结构组成语义通信系统的结构关键模块1.3 基于大模型的语义通信关键技术🧠语义通信系统中AI大模型的设计建…

网络原理-HTTP

应用层自定义协议自定义协议是指根据特定需求设计的通信规则,用于设备或系统间的数据交换。其核心在于定义数据结构、传输方式及处理逻辑。协议结构示例典型的自定义协议包含以下部分:头部(Header):标识协议版本、数据…

ROS配置debug指南

一. 安装插件 下面的这一个插件过期了需要用下面的这一个插件来替换:二. 设置CMakeLists.txt的编译模式 set(CMAKE_BUILD_TYPE "Debug") set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb") set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAG…

微软正式将GPT-5接入Microsoft Copilot Studio(国际版)

微软宣布正式在Microsoft Copilot Studio(国际版)中集成GPT-5,推动智能体构建能力实现突破性升级。此次更新不仅为企业用户带来更高效的响应速度、更精准的语境理解能力,还通过增强的逻辑推理功能,显著提升了AI交互的深…

微算法科技(NASDAQ:MLGO)通过蚁群算法求解资源分配的全局最优解,实现低能耗的区块链资源分配

随着区块链网络规模的不断扩大和业务需求的日益复杂,资源分配问题逐渐成为制约其发展的关键因素之一。传统的区块链资源分配方法往往存在效率低下、能耗过高、难以达到全局最优解等问题。高能耗不仅增加了运营成本,还对环境造成了较大的压力。因此&#…

深入浅出JVM:Java虚拟机的探秘之旅

深入浅出JVM:Java虚拟机的探秘之旅一、JVM 初相识:揭开神秘面纱 在 Java 的世界里,JVM(Java Virtual Machine,Java 虚拟机)就像是一个神秘的幕后大 boss,掌控着 Java 程序运行的方方面面。你可以…

Nginx学习笔记(八)—— Nginx缓存集成

🗄🗄 Nginx缓存集成 📌📌 一、缓存核心价值 #mermaid-svg-CNji1KUDOsF8MwoY {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-CNji1KUDOsF8MwoY .error-icon{fill:#5522…

httpx 设置速率控制 limit 时需要注意 timeout 包含 pool 中等待时间

假设通过 httpx.Client 设置 limit 速率控制后,同时发起多个请求访问 youtube。并且由于科学原因一直连接不上 假设一共 4 个连接,max_connection2,timeout5s。 默认会发生的情况不是前两个连接 tcp 握手 timeout,后两个连接再发起…

【网络】TCP/UDP总结复盘

1.UDP的格式2.TCP的格式3.TCP是来解决什么问题的?答:解决IP层的不可靠传输问题,可能数据包丢失、损坏、重复等为上层应用层提高可靠有序的数据传输服务通过校验和、确认应答机制、序列号来解决不可靠传输和无序性问题通过流量控制--->>…

Nginx 配置中,root 和 alias 区别

在 Nginx 配置中,root 和 alias 都用于定义文件路径,但它们的行为有重要区别,特别是 路径拼接方式 和 末尾斜杠 (/) 的影响。1. root 和 alias 的区别 (1) root 指令 作用:root 会将 location 的 URI 拼接到 root 路径后面&#x…

基于vue.js的无缝滚动

方法一&#xff1a;基于requestAnimationFrame demo <template><h-page-container class"hoem-page"><h1>无缝滚动</h1><h2>垂直方向</h2><div class"container1"><AutoScroll :data"list" :item-…

【Linux学习|黑马笔记|Day4】IP地址、主机名、网络请求、下载、端口、进程管理、主机状态监控、环境变量、文件的上传和下载、压缩和解压

【DAY4】 今天看的是Linux第四章剩余部分 至此Linux暂时学到这&#xff0c;第五章还包含很多软件的安装&#xff0c;但是等我要用的时候再装吧 我现在只装了MySQL8.0&#xff0c;具体教程请看笔记安装教程 内容包含更换镜像源和安装配置步骤 文章目录【DAY4】6&#xff09;IP地…

【合新通信】射频光纤传输模块详解

射频光纤传输模块是一种将射频(RF)信号通过光纤进行传输的关键设备&#xff0c;广泛应用于通信、军事、广播电视等领域。以下是关于射频光纤传输模块的全面介绍&#xff1a;基本原理与组成射频光纤传输模块主要由以下几部分组成&#xff1a;电光转换单元&#xff1a;将输入的射…