枚举中文转换为英文及调用

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         }
View Code

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     }
View Code

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         }
View Code

 

以上是关于枚举中文转换为英文及调用的主要内容,如果未能解决你的问题,请参考以下文章

请求接口访问的枚举定义,及响应返回调用结果的Java代码设计

从父活动调用时,片段视图为空

JOOQ 使用转换器将字符串转换为枚举

Java将字符串转换为枚举列表[重复]

XSLT:无法将操作数转换为“结果树片段”

在案例查询中显式转换枚举