中文 unity"/>
enum中使用中文 unity
示例:
有人为了显示中文,这样定义枚举吗?
publicenumTimeOfDay
{
上午,
下午,
晚上
};
这样定义,很别扭,特别是在使用的时候,
比如,this.Time = TimeOfDay.上午;
而且你会逐渐发现它的局限性。
枚举定义很头疼:
在系统开发中,我们经常使用枚举,但是定义枚举是个头疼的问题。
按照习惯我们习惯将枚举项定义为英语,但是,在使用的时候,特别针对国内客户的时候,如果显示的英文,则不符合要求,不易于用户使用。
尽管现在枚举定义也能定义中文枚举项,但在优雅的英文代码中穿插着中语,确实很不爽。如果涉及多语,很难扩展。
也有人经常用到常量来代替枚举,但这种方法在系统开发中不太可取,具体见:枚举与常量。
这时候我们肯定在埋怨:如果是计算机是咱们中国人发明的,也许我们就没这个问题。
解决方案:
但是这是没法改变的事实。我们只能加点转换功能变成我们想要的东西了。下面提供解决方案:
为了方便用户使用, 希望能够找到一种比较好的方法,将枚举转为我们想要的集合。通过反射,得到针对某一枚举类型的描述。
枚举的定义中加入描述,如果要支持多语,则直接修改枚举描述即可。也不用修改其他代码。
usingSystem;usingSystem.ComponentModel;publicenumTimeOfDay
{
[Description("上午")]
Moning,
[Description("下午")]
Afternoon,
[Description("晚上")]
Evening,
};
方法1:
获取枚举项+描述
//返回 Dic/DicpublicstaticDictionaryGetEnumDic(Type enumType)
{
Dictionarydic=newDictionary();
FieldInfo[] fieldinfos=enumType.GetFields();foreach(FieldInfo fieldinfieldinfos)
{if(field.FieldType.IsEnum)
{
Object[] objs=field.GetCustomAttributes(typeof(DescriptionAttribute),false);
dic.Add(field.Name, ((DescriptionAttribute)objs[0]).Description);
}
}returndic;
}
方法2: 获得值和表述的键值对
获得---值+描述
//从枚举类型和它的特性读出并返回一个键值对//Type,该参数的格式为typeof(需要读的枚举类型)///键值对publicstaticNameValueCollection GetNVCFromEnumValue(Type enumType)
{
NameValueCollection nvc=newNameValueCollection();
Type typeDescription=typeof(DescriptionAttribute);
System.Reflection.FieldInfo[] fields=enumType.GetFields();stringstrText=string.Empty;stringstrValue=string.Empty;foreach(FieldInfo fieldinfields)
{if(field.FieldType.IsEnum)
{
strValue=((int)enumType.InvokeMember(field.Name, BindingFlags.GetField,null,null,null)).ToString();object[] arr=field.GetCustomAttributes(typeDescription,true);if(arr.Length>0)
{
DescriptionAttribute aa=(DescriptionAttribute)arr[0];
strText=aa.Description;
}else{
strText=field.Name;
}
nvc.Add(strValue,strText);
}
}returnnvc;
}
更多推荐
enum中使用中文 unity
发布评论