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、 对结构成员的访问通过结构类型变量,而对枚举成员的访问则通过枚举类型的名称。

     

     

  • 相关阅读:
    Mysql的row_format(fixed与dynamic)
    no-referrer-when-downgrade什么意思
    a标签属性 rel=noopener noreferrer
    深入理解ob_flush和flush的区别
    win7下php7.1运行getenv('REMOTE_ADDR')fastcgi停止运行
    学会了这项技能,你就能获得任何想要的信息!
    原来游戏技术行业最大的秘密竟然是...
    王亮:游戏AI探索之旅——从alphago到moba游戏
    入门系列之在Ubuntu 14.04上备份,还原和迁移MongoDB数据库
    入门系列之在Ubuntu上安装Drone持续集成环境
  • 原文地址:https://www.cnblogs.com/libingql/p/1690917.html
Copyright © 2011-2022 走看看