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

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

  问题:

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

 

      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));    //低

 

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

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

 

转载于:https://www.cnblogs.com/fds-/p/6669187.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值