chiname

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

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

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

对于枚举类型:
    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”的具体实现和测试代码。https://files.cnblogs.com/hilite/EnumDisplayText.zip

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

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

评论

# re: 利用自定义属性,定义枚举值的详细文本 2006-03-25 19:03 NeilChen123

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

# re: 利用自定义属性,定义枚举值的详细文本 2006-03-25 23:06 大尾巴狼

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

# re: 利用自定义属性,定义枚举值的详细文本 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);
}
}  回复   

# re: 利用自定义属性,定义枚举值的详细文本 2006-03-27 17:04 基点项目师

各有各的理  回复   

posted on 2006-03-28 09:18  把我的欢乐带给你  阅读(267)  评论(0)    收藏  举报