zoukankan      html  css  js  c++  java
  • C#枚举类型

    enum 关键字用于声明枚举,即一种由一组称为枚举数列表的命名常数组成的独特类型。每种枚举类型都有基础类型,该类型可以是除 char 以外的任何整型。枚举元素的默认基础类型为 int。默认情况下,第一个枚举数的值为 0,后面每个枚举数的值依次递增 1。例如:

     
          enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};
    

    在此枚举中,Sat0Sun1Mon2,依此类推。枚举数可以具有重写默认值的初始值设定项。例如:

     
          enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};
    

    在此枚举中,强制元素序列从 1 而不是 0 开始。

    可以给 Days 类型的变量赋以基础类型范围内的任何值,所赋的值不限于已命名的常数。

    enum E 的默认值为表达式 (E)0 产生的值。

    Note注意

    枚举数的名称中不能包含空白。

    基础类型指定为每个枚举数分配的存储大小。但是,从 enum 类型到整型的转换需要用显式类型转换来完成。例如,下面的语句通过使用强制转换从 enum 转换为 int,将枚举数 Sun 赋给 int 类型的变量:

     
    int x = (int)Days.Sun;
    

    System.FlagsAttribute 应用于某个枚举时,如果该枚举包含一些使用按位“或”运算组合的元素,这时您会注意到该属性在用于某些工具时会影响 enum 的行为。当使用诸如 Console 类方法、表达式计算器这样的工具时,可以注意到这些变化。(请参见示例 3)。

    如果给新版本的枚举赋其他值,或者更改新版本中枚举成员的值,可能引起相关源代码的问题。情况通常是:switch 语句中使用了 enum 值,如果已将其他元素添加到 enum 类型中,那么默认值的测试可能意外地返回 true。

    如果其他开发人员将使用您的代码,您需要提供相关说明,告诉开发人员将新元素添加到任何 enum 类型时,他们的代码应该如何响应。

    在此例中,声明了一个枚举 Days。两个枚举数被显式转换为整数并赋给整型变量。

     
    // keyword_enum.cs
    // enum initialization:
    using System;
    public class EnumTest 
    {
        enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};
    
        static void Main() 
        {
            int x = (int)Days.Sun;
            int y = (int)Days.Fri;
            Console.WriteLine("Sun = {0}", x);
            Console.WriteLine("Fri = {0}", y);
        }
    }
    

    输出

    Sun = 2
    Fri = 7

    在此例中,使用了基类选项来声明成员类型是 longenum。注意,即使枚举的基础类型是 long,枚举成员仍然必须使用强制转换显式转换为 long 类型。

     
    // keyword_enum2.cs
    // Using long enumerators
    using System;
    public class EnumTest 
    {
        enum Range :long {Max = 2147483648L, Min = 255L};
        static void Main() 
        {
            long x = (long)Range.Max;
            long y = (long)Range.Min;
            Console.WriteLine("Max = {0}", x);
            Console.WriteLine("Min = {0}", y);
        }
    }
    

    输出

    Max = 2147483648
    Min = 255

    下面的代码示例阐释 enum 声明上的 System.FlagsAttribute 属性的使用和效果。

     
    // enumFlags.cs
    // Using the FlagsAttribute on enumerations.
    using System;
    
    [Flags]
    public enum CarOptions
    {
        SunRoof = 0x01,
        Spoiler = 0x02,
        FogLights = 0x04,
        TintedWindows = 0x08,
    }
    
    class FlagTest
    {
        static void Main()
        {
            CarOptions options = CarOptions.SunRoof | CarOptions.FogLights;
            Console.WriteLine(options);
            Console.WriteLine((int)options);
        }
    }
    

    输出

    SunRoof, FogLights
    5

    注意:如果从 Sat=1 中移除初始值设定项,结果将是:

     
    Sun = 1
    Fri = 6
    

    请注意,如果移除 FlagsAttribute,此示例的输出为:

    5

    5

  • 相关阅读:
    2879. [NOI2012]美食节【费用流】
    luogu P1012 拼数
    luogu cover
    luogu cogs . [NOIP2003] 传染病控制 WA(1/2)
    luogu P1340 兽径管理 WA
    luogu P1342 请柬
    HTML学习笔记二
    HTML学习笔记一
    arr.sort()
    编写函数实现随机产生指定范围的整数的功能
  • 原文地址:https://www.cnblogs.com/qianxingdewoniu/p/2806206.html
Copyright © 2011-2022 走看看