• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
.net知识
博客园    首页    新随笔    联系   管理    订阅  订阅

C#中枚举类型enum的使用

2006/12/15 C#中枚举类型enum的使用 关于enum应用的总结(摘自http://hi.baidu.com/yangzhiping/blog/item/9d841fd5a4309dc451da4baa.html) 1、关于enum的定义 enum Fabric { Cotton = 1, Silk = 2, Wool = 4, Rayon = 8, Other = 128 } 2、符号名和常数值的互相转换 Fabric fab = Fabric.Cotton; int fabNum = (int)fab;//转换为常数值。必须使用强制转换。 Fabric fabString = (Fabric)1;//常数值转换成符号名。如果使用ToString(),则是((Fabric)1).ToString(),注意必须有括号。 string fabType = fab.ToString();//显示符号名 string fabVal = fab.ToString ("D");//显示常数值 3、获得所有符号名的方法(具体参见Enum类) public enum MyFamily { YANGZHIPING = 1, GUANGUIQIN = 2, YANGHAORAN = 4, LIWEI = 8, GUANGUIZHI = 16, LISIWEN = 32, LISIHUA = 64, } foreach (string s in Enum.GetNames(typeof(MyFamily))) { Console.WriteLine(s); } 4、将枚举作为位标志来处理 根据下面的两个例子,粗略地说,一方面,设置标志[Flags]或者[FlagsAttribute],则表明要将符号名列举出来;另一方面,可以通过强制转换,将数字转换为符号名。说不准确。看下面的例子体会吧。注意: 例一: Fabric fab = Fabric.Cotton | Fabric.Rayon | Fabric.Silk; Console.WriteLine("MyFabric = {0}", fab);//输出:Fabric.Cotton | Fabric.Rayon | Fabric.Silk; 例二: class FlagsAttributeDemo { // Define an Enum without FlagsAttribute. enum SingleHue : short { Black = 0, Red = 1, Green = 2, Blue = 4 }; // Define an Enum with FlagsAttribute. [FlagsAttribute] enum MultiHue : short { Black = 0, Red = 1, Green = 2, Blue = 4 }; static void Main( ) { Console.WriteLine( "This example of the FlagsAttribute attribute \n" + "generates the following output." ); Console.WriteLine( "\nAll possible combinations of values of an \n" + "Enum without FlagsAttribute:\n" ); // Display all possible combinations of values. for( int val = 0; val <= 8; val++ ) Console.WriteLine( "{0,3} - {1}", val, ( (SingleHue)val ).ToString( ) ); Console.WriteLine( "\nAll possible combinations of values of an \n" + "Enum with FlagsAttribute:\n" ); // Display all possible combinations of values. // Also display an invalid value. for( int val = 0; val <= 8; val++ ) Console.WriteLine ( "{0,3} - {1}", val, ( (MultiHue)val ).ToString( ) ); } } /* This example of the FlagsAttribute attribute generates the following output. All possible combinations of values of an Enum without FlagsAttribute: 0 - Black 1 - Red 2 - Green 3 - 3 4 - Blue 5 - 5 6 - 6 7 - 7 8 - 8 All possible combinations of values of an Enum with FlagsAttribute: 0 - Black 1 - Red 2 - Green 3 - Red, Green 4 - Blue 5 - Red, Blue 6 - Green, Blue 7 - Red, Green, Blue 8 - 8 */ 5、枚举作为函数参数。经常和switch结合起来使用。下面举例 public static double GetPrice(Fabric fab) { switch (fab) { case Fabric.Cotton: return (3.55); case Fabric.Silk: return (5.65); case Fabric.Wool: return (4.05); case Fabric.Rayon: return (3.20); case Fabric.Other: return (2.50); default: return (0.0); } } 6、上面三点一个完整的例子 //1、enum的定义 public enum Fabric : short { Cotton = 1, Silk = 2, Wool = 3, Rayon = 8, Other = 128 } //将枚举作为参数传递 public static double GetPrice(Fabric fab) { switch (fab) { case Fabric.Cotton: return (3.55); case Fabric.Silk : return (5.65); case Fabric.Wool: return (4.05); case Fabric.Rayon: return (3.20); case Fabric.Other: return (2.50); default: return (0.0); } } public static void Main() { Fabric fab = Fabric.Cotton; int fabNum = (int)fab; string fabType = fab.ToString(); string fabVal = fab.ToString ("D"); double cost = GetPrice(fab); Console.WriteLine("fabNum = {0}\nfabType = {1}\nfabVal = {2}\n", fabNum, fabType, fabVal); Console.WriteLine("cost = {0}", cost); } 7、Enum类的使用 Enum.IsDefinde、Enum.Parse两种方法经常一起使用,来确定一个值或符号是否是一个枚举的成员,然后创建一个实例。Enum.GetName打印出一个成员的值;Enum.GetNames打印出所有成员的值。其中注意typeof的使用。这一点很重要。 public enum MyFamily { YANGZHIPING = 1, GUANGUIQIN = 2, YANGHAORAN = 4, LIWEI = 8, GUANGUIZHI = 16, LISIWEN = 32, LISIHUA = 64, } string s = "YANGHAORAN"; if (Enum.IsDefined(typeof(MyFamily), s)) { MyFamily f = (MyFamily)Enum.Parse(typeof(MyFamily), s); GetMyFamily(f); Console.WriteLine("The name is:" + Enum. GetName(typeof(MyFamily), 2)); string[] sa = Enum.GetNames(typeof(MyFamily)); foreach (string ss in sa) { Console.WriteLine(ss); }
posted on 2008-03-15 01:44  caopeng  阅读(1143)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3