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

yizhihongxing

获取枚举的描述属性在日常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日

相关文章

  • 为Xamarin.Forms的导航栏增加搜索功能

    为 Xamarin.Forms 的导航栏增加搜索功能攻略 在 Xamarin.Forms 中,可以为导航栏增加搜索功能,以便用户可以快速查找所需的内容。本攻略将介绍如何为 Xamarin.Forms 的导航栏增加搜索功能。 步骤 步骤1:创建搜索页 首先,需要创建一个搜索页,以便用户可以在其中输入搜索关键字。可以使用以下代码创建一个名为 SearchPage…

    C# 2023年5月17日
    00
  • c# 实现MD5,SHA1,SHA256,SHA512等常用加密算法源代码

    c# 实现MD5,SHA1,SHA256,SHA512等常用加密算法源代码 在c#中实现常用的加密算法可以使用System.Security.Cryptography命名空间。 MD5哈希算法 以下是使用MD5哈希算法的c#代码示例: using System.Security.Cryptography; using System.Text; public …

    C# 2023年6月8日
    00
  • C#多种操作excel的方法比较

    C#多种操作excel的方法比较 概述 在C#中,操作Excel的方法有很多种,我们可以使用COM Interop方式、OleDb方式、ADO.Net方式等。本文将对这些方式进行比较,并给出相应的示例代码。 COM Interop方式 使用COM Interop方式可以使用Excel内置的对象模型来进行Excel文件的读写操作。 示例代码: using Mi…

    C# 2023年6月1日
    00
  • C# TreeNode案例详解

    下面是详细讲解“C# TreeNode案例详解”的完整攻略。 1. 概述 在使用 C# 编写 WinForm 窗体程序时,经常会使用 TreeView 控件来实现树形结构的展示。而 TreeView 控件中的节点则是通过 TreeNode 类来表示的。本文将详细介绍如何使用 C# 中的 TreeNode 类来实现一个简单的树形结构。 2. 创建根节点 要创建…

    C# 2023年6月7日
    00
  • 深入理解C#之接口

    当我们需要定义一个规范或者一个协议,描述某个对象应该具有哪些能力时,可以使用接口。接口可以看做是一种特殊的抽象类,它没有任何实现,只用于描述对象应该有哪些能力。具体来说,一个接口是由一组抽象方法、属性、索引器和事件组成的。可以将接口看做一种契约,实现接口的类型需要履行这个契约,提供指定的能力。 以下是实现接口的基本语法: [public | internal…

    C# 2023年6月7日
    00
  • ASP.NET Core项目中调用WebService的方法

    在ASP.NET Core项目中调用WebService的方法,可以使用HttpClient或者Service Reference两种方式。以下是详细的攻略: 使用HttpClient调用WebService 使用HttpClient调用WebService需要手动构造SOAP请求,并将请求发送到WebService的URL。以下是具体步骤: 创建HttpC…

    C# 2023年5月15日
    00
  • C#中ref和out的区别浅析

    C#中ref和out的区别浅析 简介 在C#中,关键字ref和out用于传递参数。尽管两个关键字都可以使用相同的参数来传递值,但它们在应用和使用上还是有一些区别,下面进行一一讲解。 ref关键字 ref关键字用于将参数传递给函数并且函数可以修改传递的参数,同时最初传递的参数也会被修改。这里要注意的是,在使用ref关键字时,必须要在通过ref来初始化变量(即在…

    C# 2023年5月15日
    00
  • C#通过oledb访问access数据库的方法

    C#通过oledb访问access数据库的完整攻略 简介 在C#中,我们可以使用OLE DB提供程序来访问基于 OLE DB 的数据库。Microsoft Access是OLE DB的支持者之一,因此我们可以使用OLE DB连接器来访问Microsoft Access数据库。这篇攻略将向您介绍如何通过OLE DB访问Access数据库。 步骤 以下是访问Ac…

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