您的位置:首页 > 编程语言 > C#

C#将Enum枚举映射到文本字符串

2012-09-29 11:14 375 查看
演示程序下载地址:
【北方 网通】 【电信或网通】

源程序下载地址:
【北方网通】 【电信网通】

点击这里查看原文地址

【下载说明】

1 点击上面的地址,打开下载页面

2 点击"普通下载"--等待30秒--点击"下载"按钮--保存



介绍

当将以前的C代码移植到C#中时,我快发疯了,因为有很多的数组需要将常量映射到字符串。当我在寻找一个C#的方法来完成的时候,我发现了一个自定义属性和映射的方法。

如何使用代码?

对每一个enum枚举都添加一个Description属性:

private enum MyColors

{

[Description("yuk!")]       LightGreen    = 0x012020,

[Description("nice :-)")]   VeryDeepPink  = 0x123456,

[Description("so what")]    InvisibleGray = 0x456730,

[Description("no comment")] DeepestRed    = 0xfafafa,

[Description("I give up")]  PitchBlack    = 0xffffff,

}


为了在代码中读取描述字符串,你可以如下这么做:

public static string GetDescription(Enum value)

{

FieldInfo fi= value.GetType().GetField(value.ToString());

DescriptionAttribute[] attributes =

(DescriptionAttribute[])fi.GetCustomAttributes(

typeof(DescriptionAttribute), false);

return (attributes.Length>0)?attributes[0].Description:value.ToString();

}


如果没有下面的using语句,你的代码是不能通过编译的。

using System.ComponentModel;

using System.Reflection;


好处

代替代码中大量的常量和数组,上面的解决方法保持了预定义和描述在一起,并阅读性也很强。

历史

我仅仅是一个偶然的机会才发现原来FrameWork框架还提供一个DescriptionAttribute类的。当我第一次用我自己定义的属性时,发生了一些冲突,因为我引入了ComponentModel命名空间。

【更多阅读】

[译]用C#检测你的打印机是否连接
[原]使用Excel的VBA来读取和修改bmp位图像素数据
[译]C# DirectShow编程手册及实例
[原]IT6633P V0.19 数据手册、设计电路图、程序源代码
[原]C#读取CSDN博客的文章名称及地址
[原]Baidu:C#利用百度来搜索网页、图片、视频等等
[译]在.NET中使用DirectShow
[译]将C++代码转换为HTML
[译]在C# .NET2.0实现单实例应用程序
[译]在C#中使用J#运行时来压缩与解压缩
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: