Enum扩展特性实例代码
导读:收集整理的这篇文章主要介绍了Enum扩展特性实例代码,觉得挺不错的,现在分享给大家,也给大家做个参考。由于对英语的天生缺陷,在枚举时一直使用中文,这样就不用看注释就知道枚举意思,今天看到博文使用特性代替了直接使用中文作为属性。特意摘抄部分为...
收集整理的这篇文章主要介绍了Enum扩展特性实例代码,觉得挺不错的,现在分享给大家,也给大家做个参考。由于对英语的天生缺陷,在枚举时一直使用中文,这样就不用看注释就知道枚举意思,今天看到博文使用特性代替了直接使用中文作为属性。特意摘抄部分为以后使用方便
/// summary> /// 枚举帮助类/// /summary> public static class EnumTools { /// summary> /// 获取当前枚举值的描述和排序/// /summary> /// param name="value"> /param> /// returns> 返回元组Tuple(string,int)/returns> public static Tuplestring,int> GetDescription(this Enum value) { int order = 0; string description = string.Empty; TyPE type = value.GetType(); // 获取枚举FieldInfo fieldInfo = type.GetField(value.ToString()); // 获取枚举自定义的特性DescriptionAttributeobject[] attrs = fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false); DescriptionAttribute attr = (DescriptionAttribute)attrs.FirstOrDefault(a => a is DescriptionAttribute); description = fieldInfo.Name; if (attr != null) { order = attr.Order; description = attr.Name; } return new Tuplestring,int> (description,order); } /// summary> /// 获取当前枚举的所有描述/// /summary> /// returns> /returns> public static ListKeyValuePairint, string> > GetAllT> () { return GetAll(typeof(T)); } /// summary> /// 获取所有的枚举描述和值/// /summary> /// param name="type"> /param> /// returns> /returns> public static ListKeyValuePairint, string> > GetAll(Type type) { ListEnumToolsModel> list = new ListEnumToolsModel> (); // 循环枚举获取所有的Fieldsforeach (VAR field in type.GetFields()) { // 如果是枚举类型if (field.FieldType.IsEnum) { object tmp = field.GetValue(null); Enum enumValue = (Enum)tmp; int intValue = Convert.ToInt32(enumValue); var dec = enumValue.GetDescription(); int order= dec.ITem2; string showName = dec.Item1; // 获取描述和排序list.Add(new EnumToolsModel { Key = intValue, Name = showName, Order = order } ); } } // 排序并转成KeyValue返回return list.OrderBy(i => i.Order).Select(i => new KeyValuePairint, string> (i.Key, i.Name)).ToList(); } /// summary> /// 枚举Model/// /summary> partial class EnumToolsModel { public int Order { get; set; } public string Name { get; set; } public int Key { get; set; } } } /// summary> /// 枚举特性/// /summary> [Attributeusage(AttributeTargets.Field, AllowMultiple = false, Inherited = false)]public class DescriptionAttribute : Attribute { /// summary> /// 排序/// /summary> public int Order { get; set; } /// summary> /// 名称/// /summary> public string Name { get; set; } /// summary> /// 定义描述名称/// /summary> /// param name="name"> 名称/param> public DescriptionAttribute(string name) { Name = name; } /// summary> /// 定义描述名称和排序/// /summary> /// param name="name"> 名称/param> /// param name="order"> 排序/param> public DescriptionAttribute(string name, int order) { Name = name; Order = order; } }View Code
把原文中的out参数替换成返回元组,由于项目是vs2015开发,不能用c#7.0特性,否则用7.0中的值元组应该更好一点。性能和显示友好性都会有改进。
以上就是Enum扩展特性实例代码的详细内容,更多请关注其它相关文章!
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Enum扩展特性实例代码
本文地址: https://pptw.com/jishu/592143.html