让枚举成员显示出中文信息(转)

转自:http://www.cnblogs.com/sukyboor/archive/2006/04/22/382173.html
定义枚举成员的时候经常很犯愁.那就是怎么显示的问题.你说成员名称用中文吧
好象显的不够专业,毕竟中文在程序开发了是弱势语言.
public  enum SexEnum 

      男 
=   0 ,
       女 
如果向上面这样写的话,极容易被bs,所以在很多时候看到同事们是这么写的
public  enum SexEnum 

      men 
=   0 ,
       women
这样写也不行啊,如果显示出来的时候,会显示          性别: women 如果把这样的软件给客户用.准能把客户气吐血.
于是又在这个基础上加个转换函数 GetSexEnumCnName
// 获取性别类型的中文名称
ExpandedBlockStart.gifContractedBlock.gif
private   string  GetSexEnumCnName(SexEnum sex) {
ExpandedSubBlockStart.gifContractedSubBlock.gif    
switch(sex){
       
case SexEnum.men:
          
return "";
        
case SexEnum.women:
          
return ""
    }

    
return "";
}
那还有没有别的解决方法?
昨天晚上为了给 aps加上显示功能,我想到了个比较偷巧的解决方法
一、给枚举类型的各个枚举值加上自定义属性
二、要显示的时候就获得枚举自定义属性
实现方法如下:
     using  System;
    
using  System.Collections;
    
using  System.ComponentModel;
    
using  SPL.Persister.Attributes;
    
    
ExpandedBlockStart.gifContractedBlock.gif    
/**/ /// <summary>性别</summary>
ExpandedBlockStart.gif ContractedBlock.gif      public   enum  SexEnum  {
        [Description(
"")]
        men,
       
        [Description(
"")]
        women,
    }
Description是System.ComponentModel上自定义的属性.用于指定属性或事件的说明
好了,接下来是显示的工作了.
ExpandedBlockStart.gif ContractedBlock.gif          /**/ /// <summary>
        
/// 获取枚举值的详细文本
        
/// </summary>
        
/// <param name="e"></param>
        
/// <returns></returns>

         public   static   string  GetEnumDescription( object  e)
ExpandedBlockStart.gifContractedBlock.gif        
{
            
//获取字段信息
            System.Reflection.FieldInfo[] ms = e.GetType().GetFields();    
    
            Type t 
= e.GetType();
            
foreach(System.Reflection.FieldInfo f in  ms)    
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                
//判断名称是否相等
                if(f.Name != e.ToString())continue;

                
//反射出自定义属性
                foreach(Attribute attr in  f.GetCustomAttributes(true))
ExpandedSubBlockStart.gifContractedSubBlock.gif                
{
                    
//类型转换找到一个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 缓存起来.................这个简单吧,具体实现我就不写了

百足之虫,死而不僵

转载于:https://www.cnblogs.com/jinzhao/archive/2009/08/21/1551261.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值