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


    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
    收藏
    关注
    评论
  • 相关阅读:
    使用SOCKET实现TCP/IP协议的通讯
    多线程和高并发的区别
    linq学习之join
    Winform 创建桌面快捷方式并开机启动
    引领5G行业化,广和通荣获“IoT创新大奖”
    全方面的了解超宽带信号高速采集记录回放系统
    浅谈智慧灯杆的通信网建设要求
    逆向工程,调试Hello World !程序(更新中)
    融合智能将成时代方舟?中科创达技术大会向未来答疑
    第十一届蓝桥杯赛后体会和经验分享
  • 原文地址:https://www.cnblogs.com/yidengbone/p/6565788.html
Copyright © 2020-2023  润新知