枚举中文转换为英文及调用
Posted 吃回头草的马
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了枚举中文转换为英文及调用相关的知识,希望对你有一定的参考价值。
1.枚举
1 /// <summary> 2 /// 语言类别 3 /// </summary> 4 public enum LanguageType 5 { 6 [Description("所有语言")] 7 All = 0, 8 9 [Description("中文")] 10 cn = 1, 11 12 [Description("英文")] 13 en = 2, 14 15 [Description("印度斯坦语")] 16 Hindustani = 3, 17 18 [Description("西班牙语")] 19 Spanish = 4, 20 21 [Description("俄语")] 22 Russian = 5, 23 24 [Description("阿拉伯语")] 25 Arabic = 6, 26 27 [Description("孟加拉语")] 28 Bengali = 7, 29 30 [Description("葡萄牙语")] 31 Portuguese = 8, 32 33 [Description("马来-印尼语")] 34 MalayIndonesian = 9, 35 36 [Description("法语")] 37 French = 10, 38 39 [Description("日语")] 40 Japanese = 11, 41 42 [Description("韩语")] 43 Korean = 12 44 }
2.方法
1 public class EnumHelp 2 { 3 public static string GetDescription(Enum obj) 4 { 5 string objName = obj.ToString(); 6 Type t = obj.GetType(); 7 FieldInfo fi = t.GetField(objName); 8 DescriptionAttribute[] arrDesc = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false); 9 10 return arrDesc[0].Description; 11 } 12 13 /// <summary> 14 /// 获取枚举值的详细文本 15 /// </summary> 16 /// <param name="e"></param> 17 /// <returns></returns> 18 public static string GetEnumDescription(object e) 19 { 20 //获取字段信息 21 System.Reflection.FieldInfo[] ms = e.GetType().GetFields(); 22 23 Type t = e.GetType(); 24 foreach (System.Reflection.FieldInfo f in ms) 25 { 26 //判断名称是否相等 27 if (f.Name != e.ToString()) continue; 28 29 //反射出自定义属性 30 foreach (Attribute attr in f.GetCustomAttributes(true)) 31 { 32 //类型转换找到一个Description,用Description作为成员名称 33 System.ComponentModel.DescriptionAttribute dscript = attr as System.ComponentModel.DescriptionAttribute; 34 if (dscript != null) 35 return dscript.Description; 36 } 37 38 } 39 40 //如果没有检测到合适的注释,则用默认名称 41 return e.ToString(); 42 } 43 44 45 ///<summary> 46 /// 返回 Dic<枚举项,描述> 47 ///</summary> 48 ///<param name="enumType"></param> 49 ///<returns>Dic<枚举项,描述></returns> 50 public static Dictionary<string, string> GetEnumDic(Type enumType) 51 { 52 Dictionary<string, string> dic = new Dictionary<string, string>(); 53 FieldInfo[] fieldinfos = enumType.GetFields(); 54 foreach (FieldInfo field in fieldinfos) 55 { 56 if (field.FieldType.IsEnum) 57 { 58 Object[] objs = field.GetCustomAttributes(typeof(DescriptionAttribute), false); 59 60 dic.Add(field.Name, ((DescriptionAttribute)objs[0]).Description); 61 } 62 63 } 64 65 return dic; 66 } 67 68 69 ///<summary> 70 /// 从枚举类型和它的特性读出并返回一个键值对 71 ///</summary> 72 ///<param name="enumType">Type,该参数的格式为typeof(需要读的枚举类型)</param> 73 ///<returns>键值对</returns> 74 public static NameValueCollection GetNVCFromEnumValue(Type enumType) 75 { 76 NameValueCollection nvc = new NameValueCollection(); 77 Type typeDescription = typeof(DescriptionAttribute); 78 System.Reflection.FieldInfo[] fields = enumType.GetFields(); 79 string strText = string.Empty; 80 string strValue = string.Empty; 81 foreach (FieldInfo field in fields) 82 { 83 if (field.FieldType.IsEnum) 84 { 85 strValue = ((int)enumType.InvokeMember(field.Name, BindingFlags.GetField, null, null, null)).ToString(); 86 object[] arr = field.GetCustomAttributes(typeDescription, true); 87 if (arr.Length > 0) 88 { 89 DescriptionAttribute aa = (DescriptionAttribute)arr[0]; 90 strText = aa.Description; 91 } 92 else 93 { 94 strText = field.Name; 95 } 96 nvc.Add(strValue, strText); 97 } 98 } 99 return nvc; 100 } 101 }
3.调用
1 protected string GetLanguageTypeName(int languageValue) { 2 Dictionary<string,string> dic = EnumHelp.GetEnumDic(typeof(CommonEnum.LanguageType)); 3 string name = Enum.GetName(typeof(HX.Common.CommonEnum.LanguageType), languageValue); 4 5 return dic[name]; 6 }
以上是关于枚举中文转换为英文及调用的主要内容,如果未能解决你的问题,请参考以下文章