汇编 | Java | C# | Delphi | C/C++ |

给枚举类型添加GetDescription扩展方法

给枚举类型添加GetDescription扩展方法

 

内容来自dedecms

自定义枚举(enum)是C#语言编程中经常要用到的一种数据类型,比如我们要开发某个任务程序,可以自定义一个State枚举类型以方便表示任务过程的各种状态,定义如下:

织梦内容管理系统

dedecms.com

在VisualStudio集成环境下开发时,当我们需要用到与State类型有关的运算时,先输入“State.”,后面就自动出来了可以使用的各个成员值,如下图currentState变量的初始化过程,非常方便使用,且保持了代码的易读性。

copyright dedecms

copyright dedecms

有时我们会有这样一种需要,把某个State类型的变量currentState里保存着的状态信息用类似“就绪、运行、暂停、完成”的中文文本输出来,要达到这种效果,我们一般有以下方法: 内容来自dedecms

第一种方法,使用switch语句,代码如下图: 织梦内容管理系统

织梦好,好织梦

第二种方法,使用字符串数组,代码如下:

copyright dedecms

织梦内容管理系统

第一种方法比较麻烦,第二种方法需要用到强制类型转换,要用到辅助的字符串数组,当整个程序类似输出较多的话,可能还要将StateTexts定义为全局静态变量,不符合面向对象编程相关代码的封装性原则。那么有没有其他更好的方法呢?要是可以给State类型添加一个GetDescription方法,达到如下的效果就好了: dedecms.com

织梦内容管理系统

这种效果是怎么做到的呢?

织梦内容管理系统

首先,我们把State的定义过程修改成如下形式:

内容来自dedecms

copyright dedecms

然后新建一个静态类,如下图添加一个扩展方法就可以了!

dedecms.com

本文来自织梦

以后要取得State型变量的中文描述时,直接用GetDescription()方法就可以了。

内容来自dedecms

这种方法是是给所有的枚举类型都添加了GetDescription(),如果有[Description(“XX”)]行,该方法就会输出你定义的字符串”XX”,如果没有,该方法就等同于ToString(),输出这个枚举值的英文名称。

内容来自dedecms

精彩推荐
热点内容
最近更新