• Docs-.NET-C#-指南-语言参考-关键字-值类型:enum


    ylbtech-Docs-.NET-C#-指南-语言参考-关键字-值类型:enum
    1.返回顶部
    1、

    enum(C# 参考)

    enum 关键字用于声明枚举,一种包含一组被称为枚举数列表的已命名常数的不同类型。

    通常最好是直接在命名空间内定义枚举,以便命名空间中的所有类都可以同样方便地访问它。 但是,也可能会在类或结构中嵌套枚举。

    默认情况下,第一个枚举数具有值 0,并且每个连续枚举数的值将增加 1。 例如,在以下枚举中, Sat 的值为 0, Sun 的值为 1, Mon 的值为 2,依次类推。

    C#
    enum Day {Sat, Sun, Mon, Tue, Wed, Thu, Fri};

    枚举数可以使用初始值设定项来替代默认值,如下面的示例中所示。

    C#
    enum Day {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};

    在此枚举中,强制元素的序列从 1 开始,而不是 0。 但建议包括一个值为 0 的常量。 有关详细信息,请参阅枚举类型

    每个枚举类型都有一个可以为任意整型数值类型的基础类型。 char 类型不能为枚举的基础类型。 枚举元素的默认基础类型是 int。若要声明另一整型的枚举(如 byte),则请在后跟该类型的标识符后使用冒号,如以下示例所示。

    C#
    enum Day : byte {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};

    枚举类型的变量可在基本类型范围内分配到任何值;这些值不限于已命名常数。

    enum E 的默认值是由表达式 (E)0生成的值。

     备注

    枚举数名称中不能含有空格

    基础类型指定为每个枚举数分配多少存储空间。 但要将 enum 类型转换为整型,则必须使用显示转换。 例如,以下语句通过使用转换将 Sun 转换为 ,从而将枚举数 赋值为 enum int int类型的变量。

    C#
    int x = (int)Day.Sun;

    当你将 System.FlagsAttribute 应用到包含可与按位 OR 运算组合的元素的枚举中时,该特性与某些工具一起使用时会影响 enum 的行为。 当你使用工具(如 Console 类方法和表达式计算器)时,你可以注意到这些更改。 (请参阅第三个示例。)

    可靠编程

    正如任何常量一样,对枚举的各项值的所有引用在编译时都会转换为数字参数。 这可能会造成如常量中所述的潜在版本问题。

    将其他值分配到枚举的新版本,或者在新版本中更改枚举成员的值,会导致出现相关源代码问题。 通常在 switch 语句中使用枚举值。 如果已将其他元素添加到 enum 类型,则 switch 语句的默认部分可被意外地选中。

    如果其他开发人员使用你的代码,则在将新元素添加到任何 enum 类型时应提供有关他们的代码应该如何响应的准则。

    示例

    在下面的示例中,已声明枚举 Day。 已将两个枚举数显式转换为整数,并赋值为整数变量。

    C#
    public class EnumTest
    {
        enum Day { Sun, Mon, Tue, Wed, Thu, Fri, Sat };
    
        static void Main()
        {
            int x = (int)Day.Sun;
            int y = (int)Day.Fri;
            Console.WriteLine("Sun = {0}", x);
            Console.WriteLine("Fri = {0}", y);
        }
    }
    /* Output:
       Sun = 0
       Fri = 5
    */

    示例

    以下示例中,使用基类型选项来声明其成员是 enum 类型的 long。 请注意,即使该枚举的基础类型是 long,仍然需通过使用转换将枚举成员显式转换为类型 long 。

    C#
    public class EnumTest2
    {
        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);
        }
    }
    /* Output:
       Max = 2147483648
       Min = 255
    */

    示例

    下面的代码示例说明了 System.FlagsAttribute 声明中 enum 特性的使用和作用。

    C#
    // Add the attribute Flags or FlagsAttribute.
    [Flags]
    public enum CarOptions
    {
        // The flag for SunRoof is 0001.
        SunRoof = 0x01,
        // The flag for Spoiler is 0010.
        Spoiler = 0x02,
        // The flag for FogLights is 0100.
        FogLights = 0x04,
        // The flag for TintedWindows is 1000.
        TintedWindows = 0x08,
    }
    
    class FlagTest
    {
        static void Main()
        {
            // The bitwise OR of 0001 and 0100 is 0101.
            CarOptions options = CarOptions.SunRoof | CarOptions.FogLights;
    
            // Because the Flags attribute is specified, Console.WriteLine displays
            // the name of each enum element that corresponds to a flag that has
            // the value 1 in variable options.
            Console.WriteLine(options);
            // The integer value of 0101 is 5.
            Console.WriteLine((int)options);
        }
    }
    /* Output:
       SunRoof, FogLights
       5
    */

    注释

    如果删除 Flags,则示例将显示以下值:

    5

    5

    C# 语言规范

    有关详细信息,请参阅 C# 语言规范。 该语言规范是 C# 语法和用法的权威资料。

    请参阅

    2、
    2.返回顶部
     
    3.返回顶部
     
    4.返回顶部
     
    5.返回顶部
    1、
    2、
     
    6.返回顶部
     
    warn 作者:ylbtech
    出处:http://ylbtech.cnblogs.com/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    ASP.net Core
    Docker容器日志最佳实践
    手把手系列 搭建 efk 7 收集 docker 容器日志
    MyBatisPlus 字段为Null时不更新解决方案,MyBatisPlus 更新空字段
    外设驱动库开发笔记43:GPIO模拟SPI驱动
    Linux下安装Go环境
    升级openssl
    SpringBoot中try/catch异常并回滚事务(自动回滚/手动回滚/部分回滚)
    spring boot 3 集成websocket
    cocos3.x 中做渐出的效果
  • 原文地址:https://www.cnblogs.com/storebook/p/11846255.html
Copyright © 2020-2023  润新知