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日

相关文章

  • .Net 文本框实现内容提示的实例代码(仿Google、Baidu)

    下面是详细的攻略: 思路 在.NET中,实现文本框的内容提示很简单,只需要使用TextBox和ToolTip控件即可。具体思路如下: 使用TextBox控件来创建文本框 使用ToolTip控件来创建提示框 当用户输入文本时,根据输入的内容动态更新提示框中的内容 示例说明 示例1:基本的文本框实现内容提示 以仿Google、Baidu的内容提示为例,我们可以在…

    C# 2023年5月31日
    00
  • 利用C#操作WMI指南

    利用C#操作Windows Management Instrumentation (WMI)可以实现许多高级系统管理任务。下面是利用C#操作WMI的完整攻略: 1.创建WMI命名空间和管理对象 首先,需要创建一个WMI命名空间和一个管理对象。可以使用ManagementScope类来创建该对象。以下代码演示了如何创建WMI命名空间: ManagementSc…

    C# 2023年6月3日
    00
  • C# 屏蔽关键字的实现方法

    C#屏蔽关键字的实现方法 概述 在C#中,有一些关键字是不能被重写的,如if、switch、while等。但是,在有些情况下,我们希望在自定义类型中使用这些关键字作为名称,此时就需要使用屏蔽关键字的方法来实现。 屏蔽关键字的方法 在C#中,我们可以使用@符号来屏蔽关键字,具体方法如下: 将关键字前加上@符号,即可将该关键字作为普通的标识符使用。例如,我们可以…

    C# 2023年5月15日
    00
  • asp.net(c#)Enterprise Library 3.0 下载

    关于asp.net(c#)Enterprise Library 3.0下载的完整攻略,可以分成以下几个步骤: 1. 打开Enteprise Library官网页面 首先需要打开Enteprise Library官网页面,官网地址为:https://github.com/MicrosoftArchive/enterprise-library-downloads…

    C# 2023年6月3日
    00
  • C# log4net 日志输出的实现示例

    下面我将详细讲解C#log4net日志输出的实现示例,包含如何配置log4net和示例的代码实现。 配置log4net 首先,我们需要在项目中添加log4net的nuget包,并在项目的AssemblyInfo.cs文件中添加以下代码: [assembly: log4net.Config.XmlConfigurator(ConfigFile = "…

    C# 2023年5月15日
    00
  • Entity Framework Core种子数据Data-Seeding

    Entity Framework Core 种子数据(Data Seeding)可以帮助开发者在应用程序中使用预定义的数据填充数据库。本篇文章将从概览、设计、实现等方面详细地介绍 Entity Framework Core 种子数据的完整攻略,包括,如何配置数据模型和 DbContext,如何添加种子数据,以及如何在应用启动时自动应用种子数据等。 1. 概述…

    C# 2023年6月3日
    00
  • C#使用BackgroundWorker控件

    下面是关于C#使用BackgroundWorker控件的完整攻略。 什么是BackgroundWorker控件? BackgroundWorker控件是C#中一种用于在后台执行操作的控件。它提供了一个简单的方法来执行长时间运行的任务而不会阻塞用户界面。它可以非常方便地执行异步操作,如下载或计算密集型任务等。 如何使用BackgroundWorker控件? 使…

    C# 2023年5月15日
    00
  • c# Invoke和BeginInvoke 区别分析

    在C#中,Invoke和BeginInvoke都是用于在UI线程上执行委托的方法。它们的主要区别在于调用方式和执行效果。本文将介绍Invoke和BeginInvoke的区别,并提供两个示例程序。 Invoke和BeginInvoke的区别 Invoke和BeginInvoke都是用于在UI线程上执行委托的方法。它们的主要区别在于调用方式和执行效果。 Invo…

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