zoukankan      html  css  js  c++  java
  • 枚举

         枚举是一种复合值类型,使用关键字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、 对结构成员的访问通过结构类型变量,而对枚举成员的访问则通过枚举类型的名称。

     

     

  • 相关阅读:
    hdu 4027 Can you answer these queries?
    hdu 4041 Eliminate Witches!
    hdu 4036 Rolling Hongshu
    pku 2828 Buy Tickets
    hdu 4016 Magic Bitwise And Operation
    pku2886 Who Gets the Most Candies?(线段树+反素数打表)
    hdu 4039 The Social Network
    hdu 4023 Game
    苹果官方指南:Cocoa框架(2)(非原创)
    cocos2d 中 CCNode and CCAction
  • 原文地址:https://www.cnblogs.com/libingql/p/1690917.html
Copyright © 2011-2022 走看看