枚举

     枚举是一种复合值类型,使用关键字enum定义,主要用于表示一组逻辑上相关联的项的组合。

枚举用来定义一个类型,其中包含提供的限定值集合中的一个值。

和结构类型不同,枚举类型要求其成员只能是整数类型。

 

定义枚举:

    enum typeName

    {

        value1,

        value2,

        value3,

        ...

        valueN

}

声明枚举类型变量:

typeName varName;

赋值:

varName = typeName.value1;

 

    enum Weekday

    {

        Sunday,

        Monday,

        Tuesday,

        Wednesday,

        Thursday,

        Friday,

        Saturday

    }

 

枚举使用一个基本类型来存储,枚举类型可以提供的每个值都为该类型的一个值。在默认情况下,该类型为int。在枚举声明中添加类型,可以指定其他基本类型:

enum typeName : unterlyingType

    {

        value1,

        value2,

        value3,

        ...

        valueN

}

 

枚举的基本类型可以是 byte、sbyte、short、ushort、int、uint、long和ulong。

 

    enum Weekday : byte

    {

        Sunday,

        Monday,

        Tuesday,

        Wednesday,

        Thursday,

        Friday,

        Saturday

}

 

在默认情况下,C#编译器默认枚举中的第一个元素对应的整数值为0,其后的每个元素值一次递增1,自动赋给对应的基本类型值,也可以使用 = 运算符指定每个枚举的实际值,为枚举类型的变量所赋的值可以不在限定范围之内。

enum typeName

    {

        value1 = actualVal1,

        value2 = actualVal2,

        value3 = actualVal3,

        ...

        valueN = actualValN

}

没有赋值的任何值都会自动获得一个初始值——比最后一个明确声明的值大1开始的序列。

 

    enum Weekday

    {

        Sunday = 1,

        Monday,

        Tuesday = 5,

        Wednesday,

        Thursday,

        Friday,

        Saturday

    }

 

需要注意的是,结构类型是由一组不同类型的成员组成的新的数据类型,结构类型的变量包含了所有成员的值;而枚举类型只是列举出各个成员,枚举类型的变量在某一时刻只能取其中某个成员的值。

对枚举成员的访问通过“.”进行,只不过不是通过枚举类型变量,而是通过枚举类型的名称。

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace EnumExample

{

    class Program

    {

        static void Main(string[] args)

        {

            Weekday w1;

            w1 = Weekday.Sunday;

            Console.WriteLine(w1);

 

            w1 = w1 + 1;

            Console.WriteLine(w1);

 

            w1 = (Weekday)4;

            Console.WriteLine(w1);

 

            w1 = (Weekday)100; // 为枚举变量所赋在限定范围之外

            Console.WriteLine(w1); // 100

 

            int i = (int)Weekday.Friday;

            Console.WriteLine(i);

        }

    }

 

    enum Weekday

    {

        Sunday,

        Monday,

        Tuesday,

        Wednesday,

        Thursday,

        Friday,

        Saturday

    }

}

执行结果

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace EnumExample

{

    class Program

    {

        static void Main(string[] args)

        {

            Weekday w1;

            w1 = Weekday.Sunday;

            Console.WriteLine(w1);

 

            //w1 = w1 + 1;

            //Console.WriteLine(w1);

 

            //w1 = (Weekday)4;

            //Console.WriteLine(w1);

 

            //w1 = (Weekday)100; // 为枚举变量所赋在限定范围之外

            //Console.WriteLine(w1); // 100

 

            //int i = (int)Weekday.Friday; //枚举值转化为其他类型

            //Console.WriteLine(i);

        }

    }

 

    enum Weekday

    {

        Sunday = 1,

        Monday = 1,

        Tuesday,

        Wednesday,

        Thursday,

        Friday,

        Saturday

    }

}

 执行结果:

        

 

   枚举类型转换

         把枚举类型转化为其他类型,必须进行显示转换。

int i = (int)Weekday.Friday;

要获得枚举的字符值,可以使用Convert.ToString(),也可使用变量自身的ToString()。

string strSaturday = Convert.ToString(Weekday.Saturday);

         //string strSaturday = Weekday.Saturday.ToString();

string类型转换为枚举值,Enum.Parse()

          string strWednesday = "Wednesday";

          Weekday w2 = (Weekday)Enum.Parse(typeof(Weekday), strWednesday);

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace EnumExample

{

    class Program

    {

        static void Main(string[] args)

        {

            Weekday w1;

            w1 = Weekday.Sunday;

            Console.WriteLine(w1);

 

            w1 = w1 + 1;

            Console.WriteLine(w1);

 

            w1 = (Weekday)4;

            Console.WriteLine(w1);

 

            w1 = (Weekday)100; // 为枚举变量所赋在限定范围之外

            Console.WriteLine(w1); // 100

 

            int i = (int)Weekday.Friday;

            Console.WriteLine(i);

 

            // 枚举类型转换为字符串类型

            string strSaturday = Convert.ToString(Weekday.Saturday);

            //string strSaturday = Weekday.Saturday.ToString();

            Console.WriteLine(strSaturday);

 

            // 字符串类型转换为枚举类型

            string strWednesday = "Wednesday";

            Weekday w2 = (Weekday)Enum.Parse(typeof(Weekday), strWednesday);

            Console.WriteLine(w2);

        }

    }

 

    enum Weekday

    {

        Sunday,

        Monday,

        Tuesday,

        Wednesday,

        Thursday,

        Friday,

        Saturday

    }

}

执行结果:

 

 

结构与枚举的异同:

1、 结构类型是由一组不同类型的成员所组成的新的数据类型,结构类型的变量值包含了所有成员的值;而枚举类型只是列举出各个成员,枚举类型的变量在某一时刻只能取其中某个成员的值。

2、 对结构成员的访问通过结构类型变量,而对枚举成员的访问则通过枚举类型的名称。

 

 

posted @ 2010-03-21 12:03  libingql  阅读(414)  评论(0编辑  收藏  举报