大尾巴狼

所谓大尾巴狼,就是装腔作势。

利用自定义属性,定义枚举值的详细文本

新方案:http://hilite.cnblogs.com/archive/2006/03/28/360793.html

对于枚举类型:
    enum WorkState
    { 
        
/// <summary>
        
/// 计划
        
/// </summary>
        Planing,
        
/// <summary>
        
/// 就绪
        
/// </summary>
        Ready,
        
/// <summary>
        
/// 进行中
        
/// </summary>
        Processing,
        
/// <summary>
        
/// 完成
        
/// </summary>
        Finished
    }
你的客户想怎么在界面上看到这些枚举类型的值呢?
MessageBox.Show(WorkState.Ready.ToString());
结果你一定想到了,是“Ready”,而不是“就绪”。

很多情况下,要显示更完整或其他内容的枚举值文本,
解决方案之一,可以在某个地方维护一张对应表,来维护所有枚举值文本,这可能会导致枚举类型和文本脱节。
另一个方案是通过利用自定义属性“EnumDescription”,来定义枚举类型,这样枚举值和文本在一起,维护起来将很方便。
    [EnumDescription(WorkState.Planing, "计划制定中")]
    [EnumDescription(WorkState.Ready, 
"一切就绪")]
    [EnumDescription(WorkState.Processing, 
"工作进行中")]
    [EnumDescription(WorkState.Finished, 
"完成工作")]
    
enum WorkState
    { 
        Planing,
        Ready,
        Processing,
        Finished
    }

现在在调用代码:
            MessageBox.Show(
                EnumDescription.GetText(
typeof(WorkState), (int)WorkState.Planing));
你将看到想要的文字“计划制定中”。

这里是“EnumDescription”的具体实现和测试代码。http://files.cnblogs.com/hilite/EnumDisplayText.zip

这里是主要代码:
主要代码

posted on 2006-03-25 11:35 大尾巴狼 阅读(1383) 评论(4)  编辑 收藏 所属分类: dotNet技术和知识

评论

#1楼  2006-03-25 19:03 NeilChen123      

这个做法不妥,显得不够优雅。应该在每一个枚举的值上面加 Attribute 单独标注描述,以前我做过这样的实现。   回复  引用  查看    

#2楼 [楼主] 2006-03-25 23:06 大尾巴狼      

能给我代码么?
努力过,但,加不上!!!   回复  引用  查看    

#3楼  2006-03-26 09:08 双鱼座      

我的文章里有的。
1.定义一个Attribute,并且指定AttributeUsage只适合AttributeTargets.Field;
2.这个Attribute构造器只有一个string参数;
3.可以从这个Attribute中加入一个静态方法用于读出对应的描述并存到一个Hashtable中,每次就可以从这个hashtable拿到这个标签了:

foreach (FieldInfo fi in typeof(WorkState).GetFields(BindingFlags.Public | BindingFlags.Static))
{
foreach (DescriptionAttribute da in fi.GetCustomAttributes(typeof(DescrptionAttribute), false))
{
hashtable.Add(fi.GetValue(null), da.Description);
}
}   回复  引用  查看    

#4楼  2006-03-27 17:04 基点项目师      

各有各的理   回复  引用  查看    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-04-28 08:38 编辑过


相关链接:

历史上的今天:
2005-03-25 ADSI WKGUID
 


<2006年3月>
2627281234
567891011
12131415161718
19202122232425
2627282930311
2345678

导航

统计

公告

点击这里给我发消息
Locations of visitors to this page

与我联系

搜索

 

常用链接

留言簿(1)

我参与的团队

随笔分类(46)

随笔档案(37)

文章分类(9)

文章档案(9)

收藏夹(14)

coworker

开源项目

值得一看

最新随笔

积分与排名

最新评论

阅读排行榜