C#获取Description特性的扩展类详解
C#中Description特性主要用于枚举和属性,方法比较简单,记录一下以便后期使用。
扩展类DescriptionExtension代码如下:
using System; using System.ComponentModel; using System.Reflection; /// /// 描述特性的读取扩展类/// public static class DescriptionExtension{/// /// 获取枚举的描述信息/// public static string GetDescription(this Enum em){Type type = em.GetType(); FieldInfo fd = type.GetField(em.ToString()); string des = fd.GetDescription(); return des; }/// /// 获取属性的描述信息/// public static string GetDescription(this Type type, string proName){PropertyInfo pro = type.GetProperty(proName); string des = proName; if (pro != null){des = pro.GetDescription(); }return des; }/// /// 获取属性的描述信息/// public static string GetDescription(this MemberInfo info){var attrs = (DescriptionAttribute[])info.GetCustomAttributes(typeof(DescriptionAttribute), false); string des = info.Name; foreach (DescriptionAttribute attr in attrs){des = attr.Description; }return des; }}
使用方法:
[Description("测试枚举名")]enum TestEnum {[Description("测试")]Test1 }[Description("测试类名")]class TestClass{[Description("测试class")]public int Test1 { get; set; }}//获取枚举类型的描述特性string str1 = typeof(TestEnum).GetDescription(); //获取枚举值的描述特性string str2 =TestEnum.Test1.GetDescription(); str2 = typeof(TestEnum).GetDescription(nameof(TestEnum.Test1)); str2 = typeof(TestEnum).GetDescription(TestEnum.Test1.ToString()); //获取类的描述特性string str3 = typeof(TestClass).GetDescription(); //获取属性的描述特性(也可以反射遍历属性列表)string str4 = typeof(TestClass).GetDescription(); TestClass test = new TestClass(); str4 = typeof(TestClass).GetDescription(nameof(test.Test1));
补充:
C#利用扩展方法获得枚举的Description
/// /// 扩展方法,获得枚举的Description/// /// 枚举值/// 当枚举值没有定义DescriptionAttribute,是否使用枚举名代替,默认是使用///枚举的Description public static string GetDescription(this Enum value, Boolean nameInstead = true){Type type = value.GetType(); string name = Enum.GetName(type, value); if (name == null){return null; }FieldInfo field = type.GetField(name); DescriptionAttribute attribute = System.Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute)) as DescriptionAttribute; if (attribute == null && nameInstead == true){return name; }return attribute?.Description; }
【C#获取Description特性的扩展类详解】随便整一个枚举
public enum ModuleType {/// /// 中国/// [Description("中国")]ZH = 1,/// /// 美国/// [Description("美国")]MG = 2 }
到此这篇关于C#获取Description特性的扩展类详解的文章就介绍到这了,更多相关C#获取Description特性内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- 元宇宙|灰度比特币信托基金 与 SEC 举行私人会议,讨论比特币现货 ETF 问题
- 比特币|水镜论币(7.29比特币高位震荡看涨看跌(以太坊单边行情即将到来))
- (数据科学学习手札139)geopandas|(数据科学学习手札139)geopandas 0.11版本重要新特性一览
- Unity|Unity 获取设备信息
- Java|Html如何获取登陆用户名
- 新消费|泡泡玛特首家韩国旗舰店将开业;MANNER联名赫莲娜;观夏北京国子监·中国旗舰店7月启幕丨消研所周报
- 投稿|极星冲刺美股上市,吉利的“特斯拉”之梦却难圆
- 特斯拉2年内实现全自动驾驶,无人驾驶时代还远吗(丨曼孚科技)
- 活动报名 | MongoDB 5.0 时序存储特性介绍
- 10个css实现特效