LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

C# 中实现枚举(enum)的几种示例

admin
2024年11月16日 20:29 本文热度 138

前言

在 .NET 框架中,主要包括值类型、引用类型等,在某些情况下,我们需要用可读性强的符号名称,代替硬编码的数值。从而提高代码可读性。在 C# 中,可以是使用枚举的值类型来实现,本文将了解枚举实现的几种示例。

枚举(Enum)

1、概述

枚举(enum)是.NET 提供的一种值类型,由一组可以命名常量定义整型数值类型的一种方法。由基础整数值类型的一组命名常量组成。枚举常用于多项选择的场景,如表示一周中的一天、订单状态(待支付、已支付、已完成)、用户状态(激活、冻结、已删除)等

C# 使用关键字 enum 定义枚举成员的名称,语法如下面代码:

public enum EnumName{}

2、特点

  • 增强可读性与可维护性:由于枚举允许对整型常量使用描述性名称,从而使用的代码更清晰、可读性也更强。

  • 确保类型安全性:枚举可以在编译期间提供类型安全性,将值分配给该枚举类型的预定义常量集中的变量。

  • 编译器对类型检查:编译器可对枚举值进行类型检查,确保仅使用有效的枚举常量。

  • 支持智能感知:在使用集成开发环境时,可通过智能感知查看可用枚举值及其描述的列表。

  • 与switch结合使用:枚举非常适合与 switch 语句一起使用,从而能够创建更简洁、更结构化的代码来处理多个情况。

  • 降低错误风险:由于枚举常量在编译期间会得到验证,因此降低了因拼写错误或值不正确而导致错误的可能性。

3、优势

  • 枚举是一组预先确定的常量组;

  • 使用枚举可增强类型安全性;

  • 枚举可以迭代;


注意:在枚举中,分配给其成员的数值可以属于任何整数数据类型,如 byte、int、short、long、ushort等。默认情况下,枚举成员为 int 类型。

示例

1、 定义枚举类型,未对枚举的成员分配任何值时,则默认为第一个成员分配值0,其后成员值将递增1。

public enum UserStatus{    /// <summary>    /// 活动    /// </summary>    Activity,    /// <summary>    /// 已阻止    /// </summary>    Blocked,    /// <summary>    /// 已删除    /// </summary>    Deleted,    /// <summary>    /// 不活动    /// </summary>    Inaction}

2、 定义枚举类型时,显式为成员分配整数值。

public enum UserStatus{    /// <summary>    /// 活动    /// </summary>    Activity=1,    /// <summary>    /// 已阻止    /// </summary>    Blocked=2,    /// <summary>    /// 已删除    /// </summary>    Deleted=3,    /// <summary>    /// 不活动    /// </summary>    Inaction=4}

3、为每个成员分配各种值时,修改 enum 成员的默认值将导致其他成员按顺序自动分配增量值

public enum UserStatus{    /// <summary>    /// 活动    /// </summary>    Activity,     // =0    /// <summary>    /// 已阻止    /// </summary>    Blocked,    // =1    /// <summary>    /// 已删除    /// </summary>    Deleted=5,    /// <summary>    /// 不活动    /// </summary>    Inaction  // =6}

4、为枚举的每个成员分配不同的值

public enum UserStatus{    /// <summary>    /// 活动    /// </summary>    Activity,     // =0    /// <summary>    /// 已阻止    /// </summary>    Blocked,    // =1    /// <summary>    /// 已删除    /// </summary>    Deleted=5,    /// <summary>    /// 不活动    /// </summary>    Inaction  // =6}

5、与 switch 语句组合使用

namespace Fountain.WinConsole.EnumDemo{    internal class Program    {        static void Main(string[] args)        {            UserStatus userStatus = UserStatus.Activity;            switch (userStatus)            {                case UserStatus.Activity:                    break;                case UserStatus.Inaction:                    break;                case UserStatus.Deleted:                    break;                default:                    break;            }            Console.ReadKey();        }    }}

6、使用 GetNames 方法遍历所有值

namespace Fountain.WinConsole.EnumDemo{    internal class Program    {        static void Main(string[] args)        {            foreach (string enumName in Enum.GetNames(typeof(UserStatus)))            {                Console.WriteLine(enumName);            }            Console.ReadKey();        }    }}
// 输出结果ActivityBlockedDeletedInaction

7、使用 GetValues 方法遍历所有值

namespace Fountain.WinConsole.EnumDemo{    internal class Program    {        static void Main(string[] args)        {            foreach (UserStatus status in Enum.GetValues(typeof(UserStatus)))            {                Console.WriteLine(status.ToString());            }            Console.ReadKey();        }    }}// 输出结果ActivityBlockedDeletedInaction

8、在枚举类型的定义中包含典型组合

使用枚举类型表示选项的组合,需将每个选项的枚举成员定义为位字段,且关联值应该是2的幂。然后可以使用按位逻辑运算符组合选择或交叉选择组合。声明枚举类型的位域,需使用Flags属性。
namespace Fountain.WinConsole.EnumDemo{    internal class Program    {        static void Main(string[] args)        {            UserStatus userStatus = UserStatus.Blocked | UserStatus.Deleted | UserStatus.Inaction;            // 输出 Blocked Deleted Inaction            Console.WriteLine($"不可用状态{userStatus}");
           UserStatus invalidStatus = UserStatus.Blocked | UserStatus.Inaction;            // 输出 Blocked Inaction            Console.WriteLine($"受阻或不活动的 {invalidStatus}");
           Console.ReadKey();        }    }
   [Flags]    public enum UserStatus    {        /// <summary>        /// 活动        /// </summary>        Activity= 0b_0000_0000, // 0        /// <summary>        /// 已阻止        /// </summary>        Blocked= 0b_0000_0001, // 1        /// <summary>        /// 已删除        /// </summary>        Deleted= 0b_0000_0010, // 2        /// <summary>        /// 不活动        /// </summary>        Inaction= 0b_0000_0100 //4    }}

9、使用属性向枚举值添加说明【.NET Framework 4.7 以上】

using System.ComponentModel;
namespace Fountain.WinConsole.EnumDemo{    internal class Program    {        static void Main(string[] args)        {            UserStatus status = UserStatus.Deleted;            var field = status.GetType().GetField(status.ToString());            var attribute = (DescriptionAttribute)Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute));            string attributeName = attribute == null ? status.ToString() : attribute.Description;            // 输出已删除            Console.WriteLine(attributeName);            //            Console.ReadKey();        }    }
   public enum UserStatus    {        /// <summary>        /// 活动        /// </summary>        [Description("活动")]        Activity,        /// <summary>        /// 已阻止        /// </summary>        [Description("已阻止")]        Blocked,        /// <summary>        /// 已删除        /// </summary>        [Description("已删除")]        Deleted,        /// <summary>        /// 不活动        /// </summary>        [Description("不活动")]        Inaction    }}

小结

以上是枚举的八种示例,希望本文对您有所收获,如有不到之处,请多多包涵。


该文章在 2024/11/18 9:07:18 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved