用特性来给枚举值或类的属性“取”一个中文名字
在这一次的项目开发中,遇到了一个很实际的问题,所以想用这种方式把它记下来,希望能够得到大家的指点。首次发博,多多指教。
问题:
项目中的消息系统里,有一个字段叫做消息级别,建立好的枚举类型的值字段是英文的,问题就来了,前段显示的时候是中文。
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)); //低
调用则个方法就可以拿到每个消息级别所代表的中文名称了,主要是修改起来比较简单(只需要在枚举类型的这一个地方修改)。
首次发博,请多多关照,欢迎批评。
浙公网安备 33010602011771号