首页 > 代码库 > 复习系列之枚举

复习系列之枚举

一 枚举的定义

         枚举类型声明为一组相关的符号常数定义了一个类型名称。枚举用于“多项选择”场合,就是程序运行时从编译时已经设定的固定数目的“选择”中做出决定。枚举是由程序员定义的类型,与结构和类具有很强的相似性

   枚举类型(也称为枚举)为定义一组可以赋给变量的命名整数常量提供了一种有效的方法。例如,假设您必须定义一个变量,该变量的值表示一周中的一天。该变量只能存储七个有意义的值。若要定义这些值,可以使用枚举类型。枚举类型是使用 enum 关键字声明的。 

    默认情况下,枚举中每个元素的基础类型是 int。可以使用冒号指定另一种整数值类型
  如果不为枚举数列表中的元素指定值,则它们的值将以 1为增量自动递增。在前面的示例中,Days.Sunday 的值为 0,Days.Monday 的值为 1,依此类推。创建新的 Days 对象时,如果不显式为其赋值,则它将具有默认值 Days.Sunday (0)。创建枚举时,应选择最合理的默认值并赋给它一个零值。这便使得只要在创建枚举时未为其显式赋值,则所创建的全部枚举都将具有该默认值。枚举中大小写敏感,但是建议不要这样。  

enum Days { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday };

二 枚举的优点

      1、枚举能够使代码更加清晰,它允许使用描述性的名称表示整数值。

  2、枚举使代码更易于维护,有助于确保给变量指定合法的、期望的值。

  3、枚举使代码更易输入。

三 枚举的说明

  • 枚举使用enum关键字来声明,与类同级。枚举本身可以有修饰符,但枚举的成员始终是公共的,不能有访问修饰符。枚举本身的修饰符仅能使用public和internal。
  • 枚举是值类型,隐式继承自System.Enum,不能手动修改。System.Enum本身是引用类型,继承自System.ValueType。
  • 枚举都是隐式密封的,不允许作为基类派生子类。
  • 枚举类型的枚举成员均为静态,且默认为Int32类型。
  • 每个枚举成员均具有相关联的常数值。此值的类型就是枚举的底层数据类型。每个枚举成员的常数值必须在该枚举的底层数据类型的范围之内。如果没有明确指定底层数据类型则默认的数据类型是int类型。
  • 枚举成员不能相同,但枚举的值可以相同。
  • 枚举最后一个成员的逗号和大括号后面的分号可以省略

四 枚举的例子

 enum TimeOfDay
    { 
        Moning=0,
        Afternoon=1,
        Evening=2
    }
    class Program
    {
        public static string getTimeOfDay(TimeOfDay time)
        {
            string result = string.Empty;
            switch (time)
            { 
                case TimeOfDay.Moning:
                    result="上午";
                    break;
                case TimeOfDay.Afternoon:
                    result = "下午";
                    break;
                case TimeOfDay.Evening:
                    result = "晚上";
                    break;
                default:
                    result = "未知";
                    break;
            }
            return result;
        }
        static void Main(string[] args)
        {
           string time= getTimeOfDay(TimeOfDay.Evening);
           Console.Write(time);
           Console.Read();  //输出晚上
        }

五 枚举的方法

技术分享

1、获取枚举字符串

TimeOfDay time = TimeOfDay.Afternoon;

Console.WriteLine(time.ToString());//输出:Afternoon

2、Enum.Parse()方法。这个方法带3个参数,第一个参数是要使用的枚举类型。其语法是关键字typeof后跟放在括号中的枚举类名。typeof运算符将在第5章详细论述。第二个参数是要转换的字符串,第三个参数是一个bool,指定在进行转换时是否忽略大小写。最后,注意Enum.Parse()方法实际上返回一个对象引用——我们需要把这个字符串显式转换为需要的枚举类型(这是一个取消装箱操作的例子)。对于上面的代码,将返回1,作为一个对象,对应于TimeOfDay.Afternoon的枚举值。在显式转换为int时,会再次生成1。

TimeOfDay time2 = (TimeOfDay) Enum.Parse(typeof(TimeOfDay), "afternoon", true);

Console.WriteLine((int)time2);//输出1

3、得到枚举的某一值对应的名称

lbOne.Text = Enum.GetName(typeof(TimeOfDay), 0);
lbOne.Text = ((TimeOfDay)0).ToString();//返回:Morning

4、得到枚举的所有的值 

foreach (int i in Enum.GetValues(typeof(TimeOfDay)))
            lbValues.Text += i.ToString();

5、枚举所有的名称 

foreach(string temp in Enum.GetNames(typeof(TimeOfDay)))
            lbNames.Text+=temp;

 

参考资料:http://www.cnblogs.com/yank/archive/2009/02/27/1399423.html

 

复习系列之枚举