让枚举成员显示出中文信息(转)
转自:http://www.cnblogs.com/sukyboor/archive/2006/04/22/382173.html
定义枚举成员的时候经常很犯愁.那就是怎么显示的问题.你说成员名称用中文吧
好象显的不够专业,毕竟中文在程序开发了是弱势语言.
如果向上面这样写的话,极容易被bs,所以在很多时候看到同事们是这么写的
这样写也不行啊,如果显示出来的时候,会显示 性别: women 如果把这样的软件给客户用.准能把客户气吐血.
于是又在这个基础上加个转换函数 GetSexEnumCnName
//获取性别类型的中文名称
private string GetSexEnumCnName(SexEnum sex){
switch(sex){
case SexEnum.men:
return "男";
case SexEnum.women:
return "女";
}
return "";
} 那还有没有别的解决方法?
昨天晚上为了给aps加上显示功能,我想到了个比较偷巧的解决方法
一、给枚举类型的各个枚举值加上自定义属性
二、要显示的时候就获得枚举自定义属性
实现方法如下:
using System;
using System.Collections;
using System.ComponentModel;
using SPL.Persister.Attributes;
/// <summary>性别</summary>
public enum SexEnum {
[Description("男")]
men,
[Description("女")]
women,
} Description是System.ComponentModel上自定义的属性.用于指定属性或事件的说明
好了,接下来是显示的工作了.
/// <summary>
/// 获取枚举值的详细文本
/// </summary>
/// <param name="e"></param>
/// <returns></returns>
public static string GetEnumDescription(object e)
{
//获取字段信息
System.Reflection.FieldInfo[] ms = e.GetType().GetFields();
Type t = e.GetType();
foreach(System.Reflection.FieldInfo f in ms)
{
//判断名称是否相等
if(f.Name != e.ToString())continue;

//反射出自定义属性
foreach(Attribute attr in f.GetCustomAttributes(true))
{
//类型转换找到一个Description,用Description作为成员名称
System.ComponentModel.DescriptionAttribute dscript = attr as System.ComponentModel.DescriptionAttribute;
if(dscript != null)
return dscript.Description;
}

}
//如果没有检测到合适的注释,则用默认名称
return e.ToString();
} 使用方法
//显示性别
lbSex.Text = GetEnumDescription(SexEnum.man);



//用下拉列表框显示性别类型
DropDownList ddl =new DropDownList();
foreach(object e in Enum.GetValues(typeof(SexEnum)))
ddl.Items.Add(new ListItem( GetEnumDescription(e),((int)e).ToString())); 看到这里也许有人该问了?性能问题如何解决?我这里提一个方法把"SexEnum.man"作为key,把dscript 缓存起来.................这个简单吧,具体实现我就不写了
定义枚举成员的时候经常很犯愁.那就是怎么显示的问题.你说成员名称用中文吧
好象显的不够专业,毕竟中文在程序开发了是弱势语言.
如果向上面这样写的话,极容易被bs,所以在很多时候看到同事们是这么写的
这样写也不行啊,如果显示出来的时候,会显示 性别: women 如果把这样的软件给客户用.准能把客户气吐血.
于是又在这个基础上加个转换函数 GetSexEnumCnName










昨天晚上为了给aps加上显示功能,我想到了个比较偷巧的解决方法
一、给枚举类型的各个枚举值加上自定义属性
二、要显示的时候就获得枚举自定义属性
实现方法如下:














好了,接下来是显示的工作了.







































作者:today4king
出处:https://www.cnblogs.com/jinzhao/archive/2009/08/21/1551261.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2008-08-21 烙饼排序问题最优次数求解 暑期学习笔记(九)