在.NET Core中获取枚举值中文描述的方法详解

 更新时间:2025年10月16日 09:07:07   作者:MartinYangHJ  
这篇文章主要为大家详细介绍了在.NET Core中获取枚举值中文描述的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

Net项目中有如下枚举值:

public enum UserStatus
{
    [Description("未激活")]
    Inactive = 0,
    
    [Description("已激活")]
    Active = 1,
    
    [Description("已禁用")]
    Disabled = 2,
    
    [Description("待审核")]
    Pending = 3
}

请问,如何获取其中某一个枚举值的描述呢?

在 .NET Core 中获取枚举值的中文描述,可以通过以下步骤实现:

1. 创建自定义特性

using System;

/// <summary>
/// 枚举描述特性
/// </summary>
public class DescriptionAttribute : Attribute
{
    public string Description { get; }

    public DescriptionAttribute(string description)
    {
        Description = description;
    }
}

2. 定义使用中文描述的枚举

public enum UserStatus
{
    [Description("未激活")]
    Inactive = 0,
    
    [Description("已激活")]
    Active = 1,
    
    [Description("已禁用")]
    Disabled = 2,
    
    [Description("待审核")]
    Pending = 3
}

3. 创建扩展方法

using System;
using System.ComponentModel;
using System.Reflection;

public static class EnumExtensions
{
    /// <summary>
    /// 获取枚举值的描述
    /// </summary>
    /// <param name="value">枚举值</param>
    /// <returns>描述信息</returns>
    public static string GetDescription(this Enum value)
    {
        if (value == null)
            return string.Empty;

        var field = value.GetType().GetField(value.ToString());
        if (field == null)
            return value.ToString();

        // 尝试获取DescriptionAttribute
        var attribute = field.GetCustomAttribute<DescriptionAttribute>();
        if (attribute != null)
            return attribute.Description;

        // 如果没有DescriptionAttribute,返回枚举名称
        return value.ToString();
    }

    /// <summary>
    /// 获取枚举类型的所有值和描述
    /// </summary>
    /// <typeparam name="T">枚举类型</typeparam>
    /// <returns>值和描述的字典</returns>
    public static Dictionary<int, string> GetEnumDescriptions<T>() where T : Enum
    {
        var result = new Dictionary<int, string>();
        var values = Enum.GetValues(typeof(T));

        foreach (T value in values)
        {
            result.Add(Convert.ToInt32(value), value.GetDescription());
        }

        return result;
    }

     /// <summary>
     /// 获取枚举类型的所有值和描述
     /// </summary>
     /// <typeparam name="T">枚举类型</typeparam>
     /// <returns>值和描述的字典</returns>
     public static Dictionary<T, string> GetEnumDescriptionsDict<T>() where T : Enum
     {
         return Enum.GetValues(typeof(T))
                    .Cast<T>()
                    .ToDictionary(e => e, e => e.GetDescription());
     }
}

4. 使用示例

Console.WriteLine("Hello, World!");

// 示例1:获取单个枚举值的描述
UserStatus status = UserStatus.Active;
string description = status.GetDescription();
Console.WriteLine($"状态描述: {description}"); // 输出: 状态描述: 已激活

// 示例2:遍历所有枚举值
foreach (UserStatus value in Enum.GetValues(typeof(UserStatus)))
{
    Console.WriteLine($"{value}: {value.GetDescription()}");
}

// 示例3:获取所有枚举值的字典
var statusDict = EnumExtensions.GetEnumDescriptions<UserStatus>();
foreach (var item in statusDict)
{
    Console.WriteLine($"值: {item.Key}, 描述: {item.Value}");
}
Console.ReadKey();

打印结果:

Hello, World!
状态描述: 已激活
Inactive: 未激活
Active: 已激活
Disabled: 已禁用
Pending: 待审核
值: 0, 描述: 未激活
值: 1, 描述: 已激活
值: 2, 描述: 已禁用
值: 3, 描述: 待审核

5. 替代方案:使用 System.ComponentModel.DescriptionAttribute

如果不想创建自定义特性,也可以直接使用 .NET 内置的 DescriptionAttribute,代码如下:

using System.ComponentModel;

public enum UserStatus
{
    [Description("未激活")]
    Inactive = 0,
    
    [Description("已激活")]
    Active = 1
}

// 修改扩展方法中的引用
public static class EnumExtensions
{
    public static string GetDescription(this Enum value)
    {
        if (value == null)
            return string.Empty;

        var field = value.GetType().GetField(value.ToString());
        if (field == null)
            return value.ToString();

        // 使用System.ComponentModel.DescriptionAttribute
        var attribute = field.GetCustomAttribute<DescriptionAttribute>();
        if (attribute != null)
            return attribute.Description;

        return value.ToString();
    }
}

到此这篇关于在.NET Core中获取枚举值中文描述的方法详解的文章就介绍到这了,更多相关.NET Core获取枚举值中文描述内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MVC实现下拉框联动效果(单选)

    MVC实现下拉框联动效果(单选)

    这篇文章主要为大家详细介绍了MVC实现下拉框联动效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • 告别ADO.NET实现应用系统无缝切换的烦恼(总结篇)

    告别ADO.NET实现应用系统无缝切换的烦恼(总结篇)

    说起ADO.NET,就扯上了数据库访问类库了,现在的每个项目的数据库访问类应该说都很强的了,经常就听到说我的我们的数据库访问类怎么怎么强大而且支持多数据库,现在的大家做的项目里用的数据库访问类库我想也都是支持多数据库吧,支持到什么程度我就不知道了
    2009-11-11
  • 创建基于ASP.NET的SMTP邮件服务的具体方法

    创建基于ASP.NET的SMTP邮件服务的具体方法

    Asp.net在System.Web.Mail名称空间中有一个发送email的内建类,但这仅是cdosys的一个假象。开发者能使用一个替代的它smtp邮件服务。在这篇文章里面,我将会展示如何创建一个用于asp.net的功能齐全的smtp邮件服务
    2013-11-11
  • 学习使用ASP.NET 2.0的本地化

    学习使用ASP.NET 2.0的本地化

    学习使用ASP.NET 2.0的本地化...
    2007-04-04
  • ASP.NET MVC3关于生成纯静态后如何不再走路由直接访问静态页面

    ASP.NET MVC3关于生成纯静态后如何不再走路由直接访问静态页面

    高访问量类型的电子商务网站,需要将一些不是经常变化的页面生成静态页面,然后普通用户就可以直接访问这些静态页面而不用再访问需要连接数据库的动态页面。那么ASP.NET MVC3中如何做到这一点呢
    2011-12-12
  • .Net Core项目如何添加日志功能详解

    .Net Core项目如何添加日志功能详解

    这篇文章主要给大家介绍了关于.Net Core项目如何添加日志功能的相关资料,日志功能是我们开发中经常需要用到的一个功能,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-07-07
  • asp.net中js和jquery调用ashx的不同方法分享

    asp.net中js和jquery调用ashx的不同方法分享

    asp.net中js和jquery调用ashx的不同方法分享,需要的朋友可以参考一下
    2013-06-06
  • .NET简单工厂模式讲解

    .NET简单工厂模式讲解

    这篇文章主要为大家详细介绍了ASP.NET简单工厂模式的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • ASP.NET使用ajax实现分页局部刷新页面功能

    ASP.NET使用ajax实现分页局部刷新页面功能

    使用ajax方法实现分页也很简单,主要是两个,ContentTemplate和Trigger。先把listView扔ContentTemplate里面。然后在Trigger里面加入asp:AsyncPostBackTrigger,将ID指向之前的分页控件DataPager控件。具体实现代码大家可以参考下本文
    2017-03-03
  • .Net Core路由处理的知识点与方法总结

    .Net Core路由处理的知识点与方法总结

    这篇文章主要给大家介绍了关于.Net Core路由处理的知识点与方法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04

最新评论