zoukankan      html  css  js  c++  java
  • 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();
            }
        }
    原创作品,转载时请注明作者及出处
  • 相关阅读:
    iPhone电话与短信相关代码小结
    时间都去哪儿了?开源一个统计iPhone上App运行时间和打开次数的小工具【iOS8已失效】
    分享一个仿网易新闻客户端iPhone版的标签式导航ViewController
    iOS推送小结(证书的生成、客户端的开发、服务端的开发)
    Argy1risMatrix1
    2019河南模考题
    撮箕2020-3-8
    数学符号md
    2014全国甲&2015福建-几何题
    零点
  • 原文地址:https://www.cnblogs.com/qqxz/p/5205805.html
Copyright © 2011-2022 走看看