更好的使用.net 2.0中的枚举类型

原创 2006年05月27日 11:24:00
    使用枚举有诸多好处,比如可以使代码更容易编写、阅读和维护。本文假设您对C/C++的枚举已经有了相当的了解,同时知道.net架构和CLR初步知识,并且知道在合适的地方使用枚举,所以本文仅讨论在.net架构中枚举举有的新特性。
    从CLR开始,枚举类型就变成一个真正面向对象的类型,所有枚举类型均直接继承自System.Enum,后者继承自System.ValueType,System.ValueType最后继承自System.Object。因此,枚举类型属于值类型,但与其他只类型不同,枚举类型不能定义任何方法、属性或事件。正是因此,枚举类型可以使用继承自Object的公共方法,比如有名的ToString()。
    每个枚举在编译时,便一起会将其中每个符号变为类的一个常数字段。例如
    enum Color
    {
          Red,
          Green,
          Blue
    }
    会被编译为
    struct Color : System.Enum
    {
          public const Color Red = (Color) 0;
          public const Color Greed = (Color) 1;
          public const Color Blue = (Color) 2;
    }

    Enum类还提供一系列强大的静态方法,这里介绍几个典型的可以方便我们使用枚举类型的方法。
  
    Enum.Format,函数原型为 [ComVisibleAttribute(true)] public static string Format (Type enumType,Object value,String format) 如果调用 Enum.Format(typeof(Color), 2, "G") 将返回"Blue",Format的好处在可以制定返回的字符串格式,类似于ToString()的格式参数。有的人可能会说,直接在实例上使用ToString()方法不是更好吗,其实这句话里就暗示了Fomat()的好处,不需要枚举实例,可以直接传递枚举值得数值形式。

    Enmu.GetValues,函数原型为[ComVisibleAttribute(true)] public static Array GetValues (Type enumType)   ,返回值为枚举实例的数值数组。调用Enmu.GetValues(type(Color))将得到{0,1,2}。类似的还有Enmu.GerName(Type enumType, Object values)Enmu.GetNames(Type enumType)将返回枚举数值的字符串形式。

    Enmu.IsDefined,函数原型为[ComVisibleAttribute(true)] public static bool IsDefined(Type enumType, Object value),可以确定一个数值对于某个枚举类型是否合法,调用Enmu.IsDefined(typeof(Color), 10)将返回false,因为Color枚举中并没有定义10。

    Enmu.Parse,函数原型为[ComVisibleAttribute(true)]public static Object Parse ( Type enumType, string value, bool ignoreCase ),其中最后一个参数"bool ignoreCase“可以省略,表示是否忽略大小写。这个函数在实际使用中可以起到意想不到的好处,有很高的灵活性,可以转换字符串为枚举类型。调用Enmu.Parse(typeof(Color), "Bule", true)将得到一个Bule枚举实例。如果调用Enmu.Parse(typeof(Color), "Black", true)将会抛出ArgumentExceptiong异常,因为Black在Color中并没有定义。

ASP.NET 中一个绑定枚举类型的方法

定义一个枚举类型enum ContractType{    Permanent = 1,    Contract = 2,    Internship = 99}声明一个Web控件我们建立一个通用的绑...
  • veryhappy
  • veryhappy
  • 2006年01月28日 22:49
  • 1696

.net(基本数据类型,枚举类型,枚举字符串的相互转化)

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespac...
  • haifengzhilian
  • haifengzhilian
  • 2012年07月10日 09:06
  • 2264

.net枚举Enum类型说明

在.net里面 enum有2个,一个是小写的 enum,还有一个是类 Enum,两者是不同的,一般我们声明一个自己的枚举的时候,都是用enum MyEnum{     Pan1=0,     Pan2...
  • sven_xu
  • sven_xu
  • 2015年06月02日 09:14
  • 439

[.Net码农].net 枚举(Enum)使用总结

在实际问题中,有些变量的取值被限定在一个有限的范围内。例如,一个星期内只有七天,一年只有十二个月,性别只有男跟女等等。如果把这些量说明为整型、字符型或其它类型显然是不妥当的。为此,C#提供了一种称为“...
  • CrackLibby
  • CrackLibby
  • 2015年07月07日 17:16
  • 1097

.net(枚举和switch结构)

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespac...
  • haifengzhilian
  • haifengzhilian
  • 2012年07月10日 08:36
  • 1941

VS2010安装部署成.NET 2.0过程的几个问题

1,系统安装了VS2008和VS2010,在把VS2010建的4.0项目转成2.0项目,目标框架里面没有2.0,解决方法是安装.NET Framework 3.5 SP1。   2,让ex...
  • dragonpeng2008
  • dragonpeng2008
  • 2014年04月01日 15:00
  • 799

C++之枚举类型的作用

枚举类型是一种用户定义的类型,常用yu
  • letsgowei
  • letsgowei
  • 2014年05月27日 01:25
  • 1231

为什么在VS2010创建项目时选择net framework2.0的环境还可以使用var关键字?

var关键字是C# 3.0开始新增的特性,称为推断类型。 var可代替任何类型,编译器会根据上下文来判断你到底是想用什么类型,类似 object,但是效率比object高点。 var 关键...
  • oNicolasCage
  • oNicolasCage
  • 2015年05月19日 10:10
  • 1245

.Net Framework 2.0 使用WCF

起因:公司一个项目,采用VS2008开发,客户机配置参疵不齐,低配置不在少数。.Net Framework 3.5实在臃肿,安装太慢,又想用3.0的WCF进行分布式开发,于是就想到是否可以在.Net ...
  • murphey
  • murphey
  • 2015年12月25日 09:51
  • 1167

.Net 2.0 新功能:匿名方法(Anonymous Methods)

匿名方法(Anonymous Methods)1.       在2.0之前的c#版本中,声明委托的唯一方法是使用命名方法。this.Load+= new System.EventHandler(th...
  • edisundong
  • edisundong
  • 2007年09月03日 15:55
  • 2527
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:更好的使用.net 2.0中的枚举类型
举报原因:
原因补充:

(最多只允许输入30个字)