网站备案多长时间来完成,百度网页搜索,做seo网站优化价格,网站开发国外研究现状示例#xff1a; 有人为了显示中文#xff0c;这样定义枚举吗#xff1f; publicenum TimeOfDay { 上午, 下午, 晚上 }; 这样定义#xff0c;很别扭#xff0c;特别是在使用的时候#xff0c; 比如#xff0c;this.Time TimeOfDay.上午; 而…示例 有人为了显示中文这样定义枚举吗 publicenum TimeOfDay { 上午, 下午, 晚上 }; 这样定义很别扭特别是在使用的时候 比如this.Time TimeOfDay.上午; 而且你会逐渐发现它的局限性。 枚举定义很头疼 在系统开发中我们经常使用枚举但是定义枚举是个头疼的问题。 按照习惯我们习惯将枚举项定义为英语但是在使用的时候特别针对国内客户的时候如果显示的英文则不符合要求不易于用户使用。 尽管现在枚举定义也能定义中文枚举项但在优雅的英文代码中穿插着中语确实很不爽。如果涉及多语很难扩展。 也有人经常用到常量来代替枚举但这种方法在系统开发中不太可取具体见枚举与常量。 解决方案 为了方便用户使用 希望能够找到一种比较好的方法将枚举转为我们想要的集合。 枚举的定义中加入描述如果要支持多语则直接修改枚举描述即可。也不用修改其他代码。 通过反射思想得到针对某一枚举类型的描述。具体实现起来有如下代码中的三个不同的的方式。 using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Reflection;
using System.ComponentModel;namespace EnumApp
{class Program{static void Main(string[] args){NameValueCollection nvc GetNVCFromEnumValue(typeof(TimeOfDay));Console.WriteLine(1. 反射方式对TimeOfDay结构体的罗列);foreach (string key in nvc.Keys){Console.WriteLine(string.Format(key : {0}, nvc[key]));}Console.WriteLine(\n2. 直接方式1对TimeOfDay结构体的罗列);Dictionarystring, string dic GetEnumDic(typeof(TimeOfDay));foreach (string key in dic.Keys){Console.WriteLine(key :{0}, dic[key]);}Console.WriteLine(\n3. 直接方式2对TimeOfDay结构体中某一项的描述);Console.WriteLine(string.Format(TimeOfDay.Moning.ToString() :{0}, GetEnumDes(TimeOfDay.Moning)));}/// summary/// 从枚举类型和它的特性读出并返回一个键值对/// /summary/// param nameenumTypeType,该参数的格式为typeof(需要读的枚举类型)/param/// returns键值对/returnspublic static NameValueCollection GetNVCFromEnumValue(Type enumType){System.Reflection.FieldInfo[] fields;string strText, strValue;NameValueCollection nvc new NameValueCollection();Type typeDescription typeof(DescriptionAttribute);fields enumType.GetFields();foreach (FieldInfo field in fields){if (field.FieldType.IsEnum){strValue ((int)enumType.InvokeMember(field.Name, BindingFlags.GetField, null, null, null)).ToString();object[] arr field.GetCustomAttributes(typeDescription, true);if (arr.Length 0){DescriptionAttribute aa (DescriptionAttribute)arr[0];strText aa.Description;}else{strText field.Name;}nvc.Add(strValue, strText);}}return nvc;}/// summary/// 返回 Dic枚举项描述/// /summary/// param nameenumType/param/// returnsDic枚举项描述/returnspublic static Dictionarystring, string GetEnumDic(Type enumType){Dictionarystring, string dic new Dictionarystring, string();FieldInfo[] fieldinfos enumType.GetFields();foreach (FieldInfo field in fieldinfos){if (field.FieldType.IsEnum){Object[] objs field.GetCustomAttributes(typeof(DescriptionAttribute), false);dic.Add(field.Name, ((DescriptionAttribute)objs[0]).Description);}}return dic;}/// summary/// 获得某个枚举项的描述/// /summary/// param namevalue/param/// returns/returnspublic static string GetEnumDes(object value){FieldInfo fieldinfo value.GetType().GetField(value.ToString());Object[] objs fieldinfo.GetCustomAttributes(typeof(System.ComponentModel.DescriptionAttribute), false);if (objs null || objs.Length 0){return value.ToString();}else{return ((DescriptionAttribute)objs[0]).Description;}}}public enum TimeOfDay{[Description(上午)]Moning 0,[Description(下午)]Afternoon,[Description(晚上)]Evening,};//public enum TimeOfDays//{// 上午,// 下午,// 晚上//};
} View Code 或者通过下载文件直接进行测试。EnumDecriptionGet.rar 参考文章 枚举显示中文问题 转载于:https://www.cnblogs.com/arxive/p/6285718.html