C#如何获取枚举的描述属性详解

获取枚举的描述属性在日常C#开发中是一个常见需求。我们可以通过反射的方式获取枚举成员上的Description属性,从而获取枚举成员对应的描述信息。下面是详细的攻略:

一、为枚举成员添加Description属性

要获取枚举成员的描述信息,我们首先需要为每个枚举成员添加相应的Description属性,例如:

public enum Gender
{
    [Description("男")]
    Male,

    [Description("女")]
    Female
}

以上代码定义了一个Gender枚举,有两个枚举成员MaleFemale,分别对应着两个描述信息。注意,为了添加Description属性,需要引入System.ComponentModel命名空间。

二、获取枚举成员的描述信息

1. 通过反射获取Description属性

使用反射可以很方便地获取枚举成员的描述信息。通过Enum类的GetField方法获取字段信息,然后通过GetCustomAttributes方法获取该字段上的所有特性。具体代码如下:

Gender gender = Gender.Male;

FieldInfo fieldInfo = gender.GetType().GetField(gender.ToString());

DescriptionAttribute[] attributes = 
    (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);

string description = attributes.Length > 0 ? attributes[0].Description : gender.ToString();

以上代码获取了Gender.Male枚举成员的Description属性,如果该属性存在,则返回相应的描述信息;否则返回枚举成员本身的名称。

2. 使用扩展方法获取Description属性

我们也可以通过扩展方法的方式,为Enum类添加获取描述信息的方法。具体代码如下:

public static class EnumExtensions
{
    public static string GetDescription(this Enum en)
    {
        Type type = en.GetType();
        MemberInfo[] memberInfos = type.GetMember(en.ToString());

        if (memberInfos.Length > 0)
        {
            DescriptionAttribute[] attributes = 
                (DescriptionAttribute[])memberInfos[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
            if (attributes.Length > 0)
            {
                return attributes[0].Description;
            }
        }

        return en.ToString();
    }
}

以上代码定义了一个EnumExtensions静态类,为Enum类添加了一个GetDescription扩展方法,可以方便地获取枚举成员的描述信息。使用方式如下:

Gender gender = Gender.Male;

string description = gender.GetDescription();

以上代码将返回作为Gender.Male枚举成员的描述信息。如果枚举成员没有定义Description属性,则返回枚举成员本身的名称。

三、总结

以上就是获取枚举的描述属性的完整攻略。通过添加Description属性并使用反射或扩展方法,我们可以方便地获取枚举成员的描述信息。在实际开发中,可以根据需求选择不同的方式来实现。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#如何获取枚举的描述属性详解 - Python技术站

(0)
上一篇 2023年6月6日
下一篇 2023年6月6日

相关文章

  • 基于C#解决库存扣减及订单创建时防止并发死锁的问题

    首先需要明确的是,在高并发情况下,库存扣减和订单创建操作可能会引发数据不一致的问题,例如出现超卖的情况。为了避免发生这种情况,需要对库存扣减及订单创建进行并发控制。 在C#平台下,可以利用锁机制来进行并发控制。具体实现方式如下: 对库存扣减与订单创建的关键代码块(例如数据库操作)加锁,确保同时只有一个线程能够访问该关键代码块。这可以使用C#语言中的lock关…

    C# 2023年5月14日
    00
  • ASP.NET Internet安全Forms身份验证方法

    ASP.NET Internet安全Forms身份验证方法 ASP.NET Internet安全Forms身份验证方法是一种用于保护ASP.NET Web应用程序的身份验证方法。本文将提供详细的“ASP.NET Internet安全Forms身份验证方法”的完整攻略,包括如何配置Web.config文件、如何使用Forms身份验证方法以及两个示例。 配置We…

    C# 2023年5月15日
    00
  • C#通过yield实现数组全排列的方法

    下面是关于“C#通过yield实现数组全排列的方法”的完整攻略,包含两个示例。 1. 什么是数组全排列 数组全排列是指将一个数组中的所有元素进行排列组合,得到所有可能的排列方式。例如,对于数组[1, 2, 3],它的全排列为[1, 2, 3]、[1, 3, 2]、[2, 1, 3]、[2, 3, 1]、[3, 1, 2]和[3, 2, 1]。 2. C#通过…

    C# 2023年5月15日
    00
  • .NetCore手动封装日志组件的实现代码

    手动封装日志组件是一种常见的.NET Core开发技巧,可以帮助我们更好地管理和记录应用程序的日志信息。下面是手动封装日志组件的实现代码攻略: 创建日志组件类:首先,我们需要创建一个日志组件类。我们可以在.NET Core应用程序中创建一个名为Logger的类,并添加以下代码: using System; public class Logger { publ…

    C# 2023年5月16日
    00
  • 使用C#在注册表中保存信息的例子

    在C#中,可以使用Microsoft.Win32命名空间中的Registry类来访问系统注册表。下面是使用C#在注册表中保存信息的攻略。 1. 创建注册表项 在注册表中保存信息之前,需要先创建一个注册表项。可以使用RegistryKey类的CreateSubKey方法来创建一个新的子项。以下示例代码创建名为“myapp”的注册表项: using Micros…

    C# 2023年6月7日
    00
  • C# DateTime.AddHours()方法: 将指定的小时数加到指定的日期上

    DateTime.AddHours()的作用与使用方法 DateTime.AddHours()是C#语言中的一个方法,用于给一个日期时间加上指定的小时数,并返回新的日期时间。它的基本语法如下: public DateTime AddHours(double value) 其中 value 参数表示需要增加的小时数,可以是正数、负数或零。当 value 为正数…

    C# 2023年4月19日
    00
  • 在C#程序中注入恶意DLL的方法详解

    对于“在C#程序中注入恶意DLL的方法详解”的攻略,我将分为以下几个方面进行详细讲解: DLL注入的定义及原理 DLL注入的方法与过程 两个示例: 使用远程线程注入DLL、使用程序集注入DLL 1. DLL注入的定义及原理 DLL注入指的是将一个DLL文件动态注入到目标进程中的技术,这里的DLL文件可以是自己编写的,也可以是恶意代码,使用DLL注入技术,可以…

    C# 2023年5月15日
    00
  • Asp.net Core项目配置HTTPS支持

    以下是“Asp.netCore项目配置HTTPS支持”的完整攻略: 什么是HTTPS HTTPS是一种安全的HTTP协议,它使用SSL或TLS协议对数据进行加密和解密,以保护数据在传输过程中的安全性。 Asp.netCore项目配置HTTPS支持 以下是Asp.netCore项目配置HTTPS支持的步骤: 生成证书文件 配置应用程序以使用证书文件 启用HTT…

    C# 2023年5月12日
    00
合作推广
合作推广
分享本页
返回顶部