利用自定义属性,定义枚举值的详细文本
利用自定义属性,定义枚举值的详细文本
对于枚举类型: enum WorkState
{
/// <summary>
/// 计划
/// </summary>
Planing,
/// <summary>
/// 就绪
/// </summary>
Ready,
/// <summary>
/// 进行中
/// </summary>
Processing,
/// <summary>
/// 完成
/// </summary>
Finished
}
你的客户想怎么在界面上看到这些枚举类型的值呢?{
/// <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
}
[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.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技术和知识






}
浙公网安备 33010602011771号
评论
# 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 基点项目师
各有各的理 回复