千家信息网

Enum扩展特性的示例分析

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章将为大家详细讲解有关Enum扩展特性的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。使用特性代替了直接使用中文作为属性。特意摘抄部分为以后使用方便
千家信息网最后更新 2025年01月19日Enum扩展特性的示例分析

这篇文章将为大家详细讲解有关Enum扩展特性的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

使用特性代替了直接使用中文作为属性。特意摘抄部分为以后使用方便

    /// /// 枚举帮助类/// public static class EnumTools    {/// ///  获取当前枚举值的描述和排序/// /// /// 返回元组Tuple(string,int)public static Tuple 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 Tuple(description,order);        }/// /// 获取当前枚举的所有描述/// /// public static List> GetAll()        {return GetAll(typeof(T));        }/// /// 获取所有的枚举描述和值/// /// /// public static List> GetAll(Type type)        {            List list = new List();// 循环枚举获取所有的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 KeyValuePair(i.Key, i.Name)).ToList();        }/// /// 枚举Model///  partial class EnumToolsModel        {public int Order { get; set; }public string Name { get; set; }public int Key { get; set; }        }    }/// /// 枚举特性/// [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = false)]public class DescriptionAttribute : Attribute    {/// /// 排序/// public int Order { get; set; }/// /// 名称/// public string Name { get; set; }/// /// 定义描述名称/// /// 名称public DescriptionAttribute(string name)        {            Name = name;        }/// /// 定义描述名称和排序/// /// 名称/// 排序public DescriptionAttribute(string name, int order)        {            Name = name;            Order = order;        }    }

把原文中的out参数替换成返回元组,由于项目是vs2015开发,不能用c#7.0特性,否则用7.0中的值元组应该更好一点。性能和显示友好性都会有改进。

关于"Enum扩展特性的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

特性 排序 名称 篇文章 示例 分析 更多 帮助 不错 实用 使用方便 内容 原文 参数 属性 性能 文章 知识 类型 项目 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 记彔网络安全行为手抄报 郑州比较好的软件开发公司 四川思创互联网科技有限公司 ios软件开发师月薪多少 商米软件开发 榆林网络安全宣传周 淄博网络安全监察大队地址 ipad pro连接云服务器 三亚众合天辉互联网科技有限公司 上交网络安全学院是电影吗 农场游戏北京软件开发公司 贵州卫星同步子母钟服务器 工业园区智能网络技术品质保障 大话手游一生最爱服务器 laravel数据库关联查找 学校网络安全问题整改方案 腾讯云制作服务器镜像 信息管理系统数据库设计 网络安全财产安全主题班会的感悟 山东软件开发哪家可靠 数据库应用技术第11章 测验 恒智天成资料软件开发 软件开发本地化服务要求 cf手游永久服务器 厦门软件开发敏捷管理 软件工程数据库表太多怎么办 fm2011数据库 智慧水务软件开发成本 敏捷软件开发测试流程 恒团惠互联网科技有限公司
0