• 获取枚举类型的名字字符串的方法


    C++版

    总之就是查表法了。

    代码例子如下。

    #include <stdio.h>
    
    typedef enum {
        SUN,
        MON,
        TUE,
        WED,
        THU,
        FRI,
        SAT,
    } DAY;
    
    const char * const day[] = {
      "SUN",
      "MON",
      "TUE",
      "WED",
      "THU",
      "FRI",
      "SAT",
    };
    
    int main()
    {
      DAY today = WED;
      printf("Today is %s.\n", day[today]);
    
      return 0;
    }

    C#版

    .NET是比C++好用呀。代码说明一切。

    public enum TimeOfDay
    {
        Morning = 0,
        Afternoon = 1,
        Evening
    }
    
    public void EnumTest()
    {
        TimeOfDay time = TimeOfDay.Afternoon;
        //将枚举字符串打印,即枚举类型转换(解析)成字符串类型
        Console.WriteLine(time.ToString());//输出:Afternoon
    
        //获取枚举字符串的值,即将一个表示枚举成员的字符串,解析为对应枚举类型
        TimeOfDay time2 = (TimeOfDay)Enum.Parse(typeof(TimeOfDay), "Evening", true);
    
        //枚举类型可以强制转换成整型,整型也可以强制转换成枚举型
        Console.WriteLine((int)time2);//输出:2
        // 遍历所有的枚举元素            ;
        foreach (string s in Enum.GetNames(typeof(TimeOfDay)))
        {
            Console.WriteLine(s);
        }
        //输出: Morning
        //       Afternoon
        //       Evening
    }

    关于C#枚举类型的一点补充:

    枚举类型都是值类型

    System.Enum是一个抽象类(abstract class),所有枚举类型都直接继承自它,当然也同时继承了它的所有成员。

    所有的值类型都是System.ValueType的后代,枚举类型也不例外,枚举类型直接继承自System.Enum,而System.Enum却又直接继承自System.ValueType的,所以,枚举类型也是 System.ValueType的后代。
    值类型都是System.ValueType的后代,但System.ValueType的后代不全是值类型,System.Enum就是唯一的特例!

    在System.ValueType的所有后代中,除了System.Enum之外其它都是值类型。

    事实上,我们可以在.NET的源代码中找到System.Enum的声明:

    public abstract class Enum : ValueType, IComparable, IFormattable, IConvertible

    • 1. 所有枚举类型(enum type)都是值类型。
    • 2. System.Enum和System.ValueType本身是引用类型。
    • 3. 枚举类型(enum type)都是隐式的直接继承自System.Enum,并且这种继承关系只能由编译器自动展开。但System.Enum本身不是枚举类型(enum type)。
    • 4. System.Enum是一个特例,它直接继承自System.ValueType,但本身却是一个引用类型

    5. 枚举类型可以被装箱成System.Enum、System.ValueType、System.Object或者System.IConvertible、System.IFormattable、System.IComparable。

    注意:在.NET 1.1上,枚举类型只能被装箱到System.Enum、System.ValueType、System.Object;而在.NET 2.0上,枚举类型还能被装箱到System.Enum所实现的三个接口:System.IConvertible、 System.IComparable、System.IFormattable。对应的装箱操作既可以为隐式的也可以是显式的。

  • 相关阅读:
    代码风格
    C语言带返回值的宏
    设计模式之PIMPL模式
    打印控制之VT100
    C语言实现反射
    C语言实现函数override
    [BZOJ3669] [NOI2004] 魔法森林 LCT维护最小生成树
    [BZOJ4826] [HNOI2017] 影魔 单调栈 主席树
    [BZOJ2054]疯狂的馒头 并查集
    [BZOJ5305] [HAOI2018] 苹果树 数学 组合计数
  • 原文地址:https://www.cnblogs.com/awpatp/p/1525793.html
Copyright © 2020-2023  润新知