• c#中的数据类型简介(枚举)


    C#中的数据类型简介(枚举)

    枚举的定义

    根据MSDN上给出的定义,枚举是一个指定的常数集,其基础类型可以是除Char外的任何整型。 如果没有显式声明基础类型,则使用 Int32。 Enum 是 .NET Framework 中所有枚举的基类。其基础类型可以是byte、sbyte、short、ushort、int、unit、long、ulong。默认情况下,第一个枚举数的值为0,然后后续的枚举数依次加1。

    枚举的申明

    枚举可以申明在命名空间下和类同级别,也可申明在类的内部。申明语法如下:

    [access modifiers] enum <identifier> [:enum_base]

    {

    enum body

    }

    Access modifiers : 定义访问修饰符,只能是public和internal,默认internal

    Identifier:定义枚举的名称

    Enum_base:定义枚举整数的类型,默认是int(可以定义除Char外的任何整数类型,详见上面枚举的定义段)

    namespace enumDemo
    {
        enum Color:byte  //基础类型为byte
        {
            Red,
            Orange,
            Yellow,
            Green,
            Cyan,
            Blue,
            Purple,     //可以省略逗号
        };              //可以省略分号
    
        class Program
        {
            static void Main(string[] args)
            {
            }
        }
    }
        enum Color:byte  //基础类型为byte
        {
            Red=2,       //可以用基础数重定义默认值,Red基础数定义从2开始,那么Orange基础数为3,后续常量值依此类推,
    //但是建议基础数据定义包含默认值,否则枚举的实例化可能会出现问题
    Orange, Yellow, Green, Cyan, Blue, Purple, };

    实例化枚举类型

    实例化枚举值可以有三种方法

    1,直接赋值为枚举常量

    2,通过枚举值转化赋值

    3,通过构造函数实例化枚举值

        class Program
        {
            static void Main(string[] args)
            {
                Color myColor = Color.Yellow;      //赋值枚举常量
                Color myColor1 = (Color)4;         //赋值枚举值,然后转为枚举常量
                Color myColor2 = new Color();      //构造函数的初始化,myColor2赋值的枚举值为0,但是Color枚举的最小值为2,是一个非法值
                Console.WriteLine("my color is {0}, color value is {0:D}",myColor);
                Console.WriteLine(myColor1);
                Console.WriteLine("my color is {0},color value is {1} " ,(Color)myColor2,myColor2);
                Console.Read();
            }
        }

    枚举类型的转化

    System.Enum 类型是所有枚举类型的抽象基类(它是一种与枚举类型的基础类型不同的独特类型),并且从 System.Enum 继承的成员在任何枚举类型中都可用。存在从任何枚举类型到System.Enum 的装箱转换,并且存在从 System.Enum 到任何枚举类型的取消装箱转换。System.Enum 本身不是枚举类型。相反,它是一个类类型,所有枚举类型都是从它派生的。类型 System.Enum 从类型 System.ValueType派生,而后者又从类型 object 派生。在运行时,类型 System.Enum 的值可以是 null 或是对任何枚举类型的装了箱的值的引用。

        class Program
        {
            static void Main(string[] args)
            {
                Color color1 = (Color)6;             // 将整数转化为枚举常量
                int int1 = (int)Color.Green;         // 将枚举常量转化为整数
                Console.WriteLine(int1);
                string[] format = { "G", "F", "X", "D" };
                foreach (string f in format)
                {
                    string colorStr = color1.ToString(f); //格式化输出
                    Console.WriteLine(colorStr);
                }
                Console.WriteLine("Color Format is: {0}",  Enum.Format(typeof(Color), (byte)7, "G"));      //通过format方法格化将枚举值转为string
                Console.WriteLine("Color Constant is :{0}", Enum.GetName(typeof(Color), (byte)8));         //通过GetName方法将枚举值转化为string,8默认是int类型需转化为Color的基础类型byte
                foreach (string item in Enum.GetNames(typeof(Color)))          //通过GetName方法将枚举转化为string数组
                    Console.WriteLine("Color Name Constant is :{0}", item);
                
                foreach (Color item in Enum.GetValues(typeof(Color)))          //通过GetValues方法转化为Color常量
                    Console.WriteLine("Color value is {0}", item);
                if  (Enum.IsDefined(typeof(Color), (byte)4))
                    Console.WriteLine("the value 4's constant is {0}", Enum.Parse(typeof(Color),"4"));
                else
                    Console.WriteLine("the 4 value is not define");
                Color color2 = (Color)Enum.ToObject(typeof(Color), 4);         //通过ToObject方法将整数值转化为枚举常量
                Console.WriteLine(color2);
                Color color3;
                if (Enum.TryParse("2", out color3))                            //通过TryParse试做将字符串转换为枚举常量
                    Console.WriteLine("The value 2 is Defined: {0}",color3);
                else
                    Console.WriteLine("The value 2 is not Defined");
    
                if (Enum.TryParse("BLACK", out color3))                         //通过TryParse试做将字符串转换为枚举常量
                    Console.WriteLine("The CONSTANT BLACK is Defined: {0}", color3);
                else
                    Console.WriteLine("The CONSTANT BLACK is not Defined");
                Console.Read();
            }
        }

    位运算

    在枚举的申明上面加上[Flags]特性

        class Program
        {
            [Flags]
            enum familyPets
            {
                None = 0x0,  //定义16进制的0
                Dog = 0x01,  //定义16进制的1
                Cat = 0x02, 
                Bird = 0x04,
                Duck = 0x08,
            };
    
            static void Main(string[] args)
            {
                familyPets fp = familyPets.Dog | familyPets.Cat;
                Console.WriteLine("Pets: {0:G} ({0:D})", fp);   //显示结果Dog,Cat(3),16进制1和2按位或运算结果为3
                if (fp.HasFlag(familyPets.Cat))                 //判断fp是否定义位域Cat
                   Console.WriteLine("有宠物猫。");
                else
                    Console.WriteLine("没有宠物猫。");
    
                if ((fp & familyPets.Dog) == familyPets.Dog)    //fp和Dog位域按位与运算
                    Console.WriteLine("有宠物Dog。");
                else
                    Console.WriteLine("没有宠物Dog。");
    
                if (fp == familyPets.None)                      //fp位运算的结果为3,不为0
                    Console.WriteLine("家庭里没有宠物。");
                else
                    Console.WriteLine("家庭里有宠物。");                   
                Console.Read();
            }
        }
    原创作品,转载时请注明作者及出处
  • 相关阅读:
    dotnet 新项目格式与对应框架预定义的宏
    dotnet 线程静态字段
    dotnet 线程静态字段
    dotnet 通过 WMI 拿到显卡信息
    dotnet 通过 WMI 拿到显卡信息
    dotnet 通过 WMI 获取指定进程的输入命令行
    dotnet 通过 WMI 获取指定进程的输入命令行
    dotnet 通过 WMI 获取系统信息
    dotnet 通过 WMI 获取系统信息
    PHP show_source() 函数
  • 原文地址:https://www.cnblogs.com/qqxz/p/5205805.html
Copyright © 2020-2023  润新知