zoukankan      html  css  js  c++  java
  • 获取枚举类型的名字字符串的方法

    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。对应的装箱操作既可以为隐式的也可以是显式的。

  • 相关阅读:
    LeetCode Flatten Binary Tree to Linked List
    LeetCode Longest Common Prefix
    LeetCode Trapping Rain Water
    LeetCode Add Binary
    LeetCode Subsets
    LeetCode Palindrome Number
    LeetCode Count and Say
    LeetCode Valid Parentheses
    LeetCode Length of Last Word
    LeetCode Minimum Depth of Binary Tree
  • 原文地址:https://www.cnblogs.com/awpatp/p/1525793.html
Copyright © 2011-2022 走看看