C#,入门教程(11)——枚举(Enum)的基础知识和高级应用

news2024/9/29 15:33:09

上一篇:

C#,入门教程(10)——常量、变量与命名规则的基础知识icon-default.png?t=N7T8https://blog.csdn.net/beijinghorn/article/details/123913570

不会枚举,就不会编程!

枚举 = 一个有组织的常量系列

比如:一个星期每一天的名字,周一、周二。。。周日。

所有成系列的常量都应该用枚举方式加以定义与使用。

一、枚举的定义

C#用 enum 定义枚举。

每个项都被自动赋予了一个(整数类型)值。对于整数类型,项值是递增的。默认是从 0 开始的,也就是项 1 的值是 0、项 2 的值是 1。如果不需要系统自动为项指定值,也可以直接为其赋一个(数)值。每个没有指定值的项,它的初始值都是上一个项的值 +1。可以任意指定某项为特定的值。拗口吧?看文字学不到的,多看看代码就能理解了。

1、基本格式

// 完整方式
访问修饰符 enum 枚举名字 : 数据类型(可无)
{
     枚举项 = 初值(可无),
}

// 实例
public enum GradeName : int
{
    幼儿园 = 0,
    小学,
    初中,
    高中,
    大学 = 10,
    硕士,
    博士
}

2、简约模式


// 简约模式(默认数据类型int)
// 第一项,默认从0开始
public enum GradeName
{
    Undefined = -1,
    幼儿园,
    小学,
    初中,
    高中,
    大学,
    硕士,
    博士
}

二、枚举的使用

定义好的枚举,类似于一种数据类型,用起来与 int 、double 差不多。

// 类
public class StudentInfo
{
    public GradeTitle Grade { get; set; } = GradeTitle.Undefined;
}

// 幼儿园毕业?毕业证呢?
// 拿不出来?那你没有最低学历!
if(firstStudent.Grade == GradeTitle.幼儿园)
{
    ;
}

又:所有枚举的第一个项一定是 Undefined !!!

枚举很简单,用好不简单。

三、枚举与字符串的对照方法

有些情况下,为了代码或结果的可阅读性,期望将 枚举 与 字符串对照起来。

代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Reflection;

namespace DataBeginner
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.StartPosition = FormStartPosition.CenterScreen;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            StringBuilder sb = new StringBuilder();

            sb.AppendLine("2 is " + EnumDescription(EnglishNumbers.Two));

            webBrowser1.DocumentText = sb.ToString();
        }

        /// <summary>
        /// 利用反射机制,从枚举数值获取其文本描述字符串
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        public static string EnumDescription(Enum value)
        {
            FieldInfo fi = value.GetType().GetField(value.ToString());
            DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);
            return (attributes.Length > 0) ? attributes[0].Description : value.ToString();
        }
    }

    public enum EnglishNumbers
    {
        [Description("One")] 
        One = 1,
        [Description("Two")] 
        Two = 2,
        [Description("Three")] 
        Three = 3,
        [Description("Four")] 
        Four = 4,
        [Description("Five")] 
        Five
    }
}

下一篇:

C#,入门教程(12)——数组及数组使用的基础知识icon-default.png?t=N7T8https://blog.csdn.net/beijinghorn/article/details/123918227

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

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

相关文章

【SpringCloud】之入门级及nacos的集成使用

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是君易--鑨&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《SpringCloud开发之入门级及nacos》。&#x1f3…

k8s 陈述式资源管理

k8s 陈述式资源管理 命令行&#xff1a;kubectl命令行工具 优点&#xff1a;90%以上的场景都可以满足 对资源的增&#xff0c;删&#xff0c;查比较方便&#xff0c;对改不是很友好 缺点&#xff1a; 命令比较冗长&#xff0c;复杂难记 声明式&#xff1a; k8s当中的yaml…

SpringCloud-高级篇(十二)

在主从集群中slave节点发生了宕机&#xff0c;不用担心&#xff0c;只要它重启就能从master节点上完成数据的同步&#xff0c;恢复数据&#xff0c;如果宕机的不是slave而是master&#xff0c;是不是master重启就可以呢&#xff1f;如果你做了master节点的数据持久化&#xff0…

SolidUI Gitee GVP

感谢Gitee&#xff0c;我是一个典型“吃软不吃硬”的人。奖励可以促使我进步&#xff0c;而批评往往不会得到我的重视。 我对开源有自己独特的视角&#xff0c;我只参与那些在我看来高于自身认知水平的项目。 这么多年来&#xff0c;我就像走台阶一样&#xff0c;一步一步参与…

MySQL第四战:视图以及常见面试题(上)

目录 目录&#xff1a; 一.视图 1.介绍什么是视图 2.视图的语法 语法讲解 实例操作 二.MySQL面试题 1.SQL脚本 2.面试题实战 三.思维导图 目录&#xff1a; 随着数字化时代的飞速发展&#xff0c;数据库技术&#xff0c;特别是MySQL&#xff0c;已经成为IT领域中不可…

自动驾驶:低阶可部署的单目测距算法-基于YOLO与透视变换

一、开发环境 部署平台&#xff1a;英伟达的Jetson Nano 环境&#xff1a;Linux ROS 语言&#xff1a;C 设备&#xff1a;1920*1080像素的摄像头、开发板。 模型&#xff1a;yolo-v8s 二、单目测距实现思路 0、标定相机和车辆&#xff08;假设已经标定完成&#xff09; 1、通…

配置cendos 安装docker 配置阿里云国内加速

由于我安装的cendos是镜像版。已经被配置好了。所以只需要更新相关配置信息即可。 输入 yum update自动更新所有配置 更新完成后输入 yum list docker-ce --showduplicates | sort -r 自动查询所有可用的docker版本 输入 yum install docker-ce docker-ce-cli container…

【Nginx】#安装配置及应用场景使用说明

文章目录 常见公网DNS服务1.Nginx的安装版本区别解压文件1.1编译安装1.2 启动安装1.3 安装成系统服务 2.运行原理3.Nginx配置及应用场景3.1最小配置worker_processesworker_connectionsinclude mime.types;default_type application/octet-stream;sendfifile on;keepalive_time…

k8s实践(14)--scheduler调度器和pod调度策略

一、scheduler调度器 1、kube-scheduler简介 k8s实践(10) -- Kubernetes集群运行原理详解 介绍过kube-scheduler。 kube-scheduler是运行在master节点上&#xff0c;其主要作用是负责资源的调度&#xff08;Pod调度&#xff09;&#xff0c;通过API Server的Watch接口监听新建…

vue3按钮点击频率控制

现有一个按钮&#xff0c;如下图 点击时 再次点击 刷新窗口再次点击 刷新窗口依然可以实现点击频率控制。 代码实现&#xff1a; <template><!--<el-config-provider :locale"locale"><router-view/></el-config-provider>--><el…

TypeScript 从入门到进阶之基础篇(四) symbol类型篇

系列文章目录 TypeScript 从入门到进阶系列 TypeScript 从入门到进阶之基础篇(一) ts基础类型篇TypeScript 从入门到进阶之基础篇(二) ts进阶类型篇TypeScript 从入门到进阶之基础篇(三) 元组类型篇TypeScript 从入门到进阶之基础篇(四) symbol类型篇 持续更新中… 文章目录 …

码农好沟通吗?

码农好沟通吗&#xff1f;这个标题本身就是一个问题&#xff0c;个人认为 找对沟通的对象&#xff0c;是保证有效沟通的前提和基础 &#xff0c;很多时候都能听见程序员和客户沟通差点把客户气死&#xff0c;理解不到客户的需求点。因为相互间的知识体系都不一样&#xff0c;如…

visi 各版本安装指南

visi下载链接 https://pan.baidu.com/s/1WNksdiChCPebPvRRSVakOA?pwd0531 1.鼠标右键【visi2021(64bit)】压缩包&#xff08;win11及以上系统需先点击“显示更多选项”&#xff09;选择【解压到 visi2021(64bit)】。 2.打开解压后的文件夹&#xff0c;鼠标右击【Setup VISI 2…

Ubuntu软件和vmware下载

https://cn.ubuntu.com/download/desktop VMware 中国 - 交付面向企业的数字化基础 | CN

Linux Ubuntu 20.04.6 Intel WiFi6 Ax411 1690i Ax1690i Killer 解决无线网卡识别不出来问题

项目场景&#xff1a; 网卡型号&#xff1a;英特尔 Killer™ Wi-Fi 6E AX1690 i/s ubuntu 版本 uname -a Linux kuanli 5.15.0-91-generic #101~20.04.1-Ubuntu SMP Thu Nov 16 14:22:28 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux cat /proc/version Linux version 5.15.0-9…

注册 Mongodb 官网个人账号

上文 Mongodb基础介绍与应用场景我们简单说了一下 Mongodb 的场景 那么 我们先在他的官网创建一个个人账号 我们先访问官网 https://www.mongodb.com/zh-cn 这里 我们需要注册一下 这里 我们按要求填写信息 然后 点击下面创建账户 然后 点击下面创建账户 然后 他会要求我们邮…

三维地下管线建模工具MagicPipe3D V3.3发布

经纬管网建模系统MagicPipe3D V3.3 持续更新&#xff0c;欢迎下载试用&#xff1a;http://www.magic3d.net 1、发布MagicPipe3D宣传操作视频, 2、发布MagicPipe3D数据规格说明, 3、更新使用手册到3.3.0版本, 4、增加支持属性字段中文, 5、增加支持附属物方…

5.云原生安全之kubesphere应用网关配置域名TLS证书

文章目录 cloudflare配置使用cloudflare托管域名获取cloudflare API Token在cloudflare中配置SSL/TLS kubesphere使用cert-manager申请cloudflare证书安装证书管理器创建Secret资源创建cluster-issuer.yaml创建cert.yaml申请证书已经查看申请状态 部署harbor并配置ingress使用证…

【论文解读】基于神经辐射场NeRF的像素级交互式编辑(Seal-3D)

来源&#xff1a;投稿 作者&#xff1a;橡皮 编辑&#xff1a;学姐 论文链接&#xff1a;https://arxiv.org/pdf/2307.15131 项目主页&#xff1a;https://windingwind.github.io/seal-3d/ 摘要&#xff1a; 随着隐式神经表征或神经辐射场&#xff08;NeRF&#xff09;的普及…

docker部署simpleDocker

1&#xff0c;安装docker&#xff0c;请参考 linux安装docker 2&#xff0c;安装docker-compose&#xff0c;请参考 Docker-Compose 3&#xff0c;安装simpleDocker 准备docker-compose.yml文件 version: 3 services:redis:container_name: redisimage: redis:latestweb:conta…