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

C#枚举类型携带额外数据的方法

Java里面的枚举类型可以定义很多属性,携带各种数据,然而C#里面的枚举类型只能代表数字,不能在枚举类型里面定义各种属性,导致某些应用场景使用起来不方便,但是可以利用C#里面的Attribute来解决这个问题。
例如,我要给以下这个枚举类型添加中文描述

public enum ItemType
{
    [Description("武器")]
    Weapon,
    [Description("可消耗品")]
    Consumable
}

其中,Description是C#自带的Attribute。
然后,可以定义一个扩展方法

public static class CommonExtensions
{
    public static T GetAttribute<T>(this Enum value) where T : Attribute
    {
        var field=value.GetType().GetField(value.ToString());
        var attributes = field.GetCustomAttributes(typeof(T), false);
        return attributes.Length>0 ? (T)attributes[0] : null;
    }
}

这个扩展方法需要传入一个泛型,通过反射机制,获取添加在枚举值上面的Attribute对象。

itemType.GetAttribute<DescriptionAttribute>().Description

通过调用GetAttribute方法,就可以得到对应的Attribute对象,并调用它里面的属性和方法。
当然,也可以自定义Attribute,使枚举类型可以携带任意的数据。


http://www.kler.cn/a/509157.html

相关文章:

  • MQ消息队列
  • 【Go】Go Gorm 详解
  • Vue2+OpenLayers实现折线绘制功能(提供Gitee源码)
  • Html5 video标签学习
  • 图数据库 | 18、高可用分布式设计(中)
  • 关于vite+vue3+ts项目中env.d.ts 文件详解
  • 正点原子repo放到自己的git服务器
  • 第k小(经典Top k问题)
  • springboot整合libreoffice(两种方式,使用本地和远程的libreoffice);docker中同时部署应用和libreoffice
  • Vector的模拟实现与迭代器失效问题
  • 什么是SSL及SSL的工作流程
  • 线性表代码实战
  • 开发完全开源的AI会议助手:提升会议效率
  • STM32的DMA作用
  • Ubuntu20.04安装mysql9.0.1,并且修改数据文件路径
  • 【C++】哈希表的使用
  • Solidity03 Solidity变量简述
  • SpringBoot的AOP-入门
  • nvm 管理nodejs,安装pnpm后报错,出现:pnpm不是内部或外部命令,也不是可运行的程序或批处理文件。
  • Plume :RWAfi 叙事引领者,全新加密时代的新蓝筹生态
  • 第4章 Kafka核心API——Kafka客户端操作
  • 深度学习常见术语解释
  • 计算机网络ENSP课设--三层架构企业网络
  • 后盾人JS -- JS数组挖掘(成年篇)
  • Mysql--实战篇--连接池(连接池原理,HikariCP、C3P0、Druid和DBCP等)
  • LLama 架构一览