路人第十三

导航

用特性来给枚举值或类的属性“取”一个中文名字

  在这一次的项目开发中,遇到了一个很实际的问题,所以想用这种方式把它记下来,希望能够得到大家的指点。首次发博,多多指教。

  问题:

    项目中的消息系统里,有一个字段叫做消息级别,建立好的枚举类型的值字段是英文的,问题就来了,前段显示的时候是中文。

 

      public enum  Types

  {

    low,

    mid,

    height

  }

 

  类似这样的效果,一开始觉得可以在js中用switch判断,后来发现这样修改起来比较麻烦(比如我需要添加一个值,修改的地方就比较多),所以就想到了一个办法。

  解决方案:

    解决办法就是利用C#中的特性。

 

  public class Name:Attribute

  {

    public Name(string name)

    {

      this.name=name;

    }

    public string name{get;set;}

  }

 

   在枚举中添加上Name特性就好了。

   public enum  Types

    {

      [Name("低")]

      low,

      [Name("中")]

      mid,

      [Name("高")]

      height

    }

    下面就是获取给定名称的方法:

           

  /// <summary>
  /// 获取枚举的Name特性值
  /// </summary>
  /// <typeparam name="T"></typeparam>
  /// <param name="thisTypeValue">枚举值</param>
  /// <param name="attrType">要获取的特性</param>
  /// <returns></returns>
  public static string GetEnumName<T>(this T thisTypeValue,Type attrType) where T : struct
  {
    Type type = thisTypeValue.GetType();
    if (!type.IsEnum)    return "";
    FieldInfo info = type.GetField(thisTypeValue.ToString());
    dynamic attr = info.GetCustomAttribute(attrType);
    return attr == null ? "" : attr.name;
  }

 

          测试结果如下:

  var cnname=Types.low.GetEnumName(typeof(Name));    //低

 

    调用则个方法就可以拿到每个消息级别所代表的中文名称了,主要是修改起来比较简单(只需要在枚举类型的这一个地方修改)。

    首次发博,请多多关照,欢迎批评。

 

posted on 2017-04-05 16:16  路人第十一  阅读(1262)  评论(0编辑  收藏  举报