当前位置: 首页 > news >正文

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();// 尝试获取DescriptionAttributevar 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.DescriptionAttributevar attribute = field.GetCustomAttribute<DescriptionAttribute>();if (attribute != null)return attribute.Description;return value.ToString();}
}

http://www.dtcms.com/a/486440.html

相关文章:

  • 深度学习笔记:入门
  • 第六篇: `dmesg` `lspci` - 硬件层面的“黑匣子”与“雷达”
  • 青岛制作网站云南建设厅查证网站
  • 自己怎么做外贸英文网站大型电商网站开发成本
  • 论文理解 【LLM-回归】—— Decoding-based Regression
  • DeepSeek使用教程
  • 青龙 定时任务管理平台
  • csdn手机app应该增加导入word格式markdown格式,或者输入网址自动导入
  • K8s学习笔记(二十) 亲和性、污点、容忍、驱逐
  • 培训餐饮网站建设dede 分类信息网站 模板
  • 硅基计划4.0 算法 二叉树深搜(DFS)
  • 深度学习------目标检测项目
  • 【MySQL】数据库表的CURD(二)
  • 计算机视觉--opencv---如何识别不同方向图片的识别(一)
  • 互联网大厂Java求职面试全景实战解析(涵盖Spring Boot、微服务及云原生技术)
  • Linux使用Docker部署Node.js+Express+SQLite项目
  • 如何自己开网站济南做平台网站的
  • STM32H743-ARM例程21-DSP
  • Linux下编译CGAL
  • 十五、OpenCV中的图像浮雕技术
  • 网站建设的搜索栏怎么设置重庆市建设工程信息网官网施工许可证查询
  • Effectively Using Public Data in Privacy Preserving Machine Learning
  • 国产电脑操作系统与硬盘兼容性现状分析:挑战与前景评估
  • 从 DAG 到 Shuffle:掌握 Spark RDD 宽窄依赖的调优密码
  • 48 元四核 ARM 核心板!明远智睿 2351 进入嵌入式市场
  • 李宏毅机器学习笔记23
  • 为何打不开中国建设银行网站深圳品牌营销策划机构
  • 大连旅顺网站制作有哪些网站可以做笔译
  • 【遥感图像处理】遥感图像车辆检测与跟踪全流程实战:从数据到部署(含Python代码)
  • PPO论文阅读