关于Enum.GetValues()返回值的困惑

Fro*_*raw 0 c# enums enumeration

我正在阅读一本书中的枚举,并给出了以下代码示例:

namespace FunWithEnums
{
    enum EmpType : byte
    {
        Manager = 10, 
        Grunt = 1,
        Contractor = 100,
        VicePresident = 9

    }
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("**** Fun with Enums *****");

            EmpType emp = EmpType.Contractor;
            EvaluateEnum(emp);
            Console.ReadLine();
        }

        static void EvaluateEnum(System.Enum e)
        {
            Array enumData = Enum.GetValues(e.GetType());

            for (int i =0; i < enumData.Length; i++)
            {
                Console.WriteLine("Name: {0}, Value: {0:D}", enumData.GetValue(i));
            }
            Console.WriteLine();
        }
}
Run Code Online (Sandbox Code Playgroud)

我对于在forloop中打印出来的内容感到非常困惑.输出是

姓名:Grunt,价值:1

姓名:副总统,价值:9

姓名:经理,价值:10

名称:承包商,价值:100

但它如何获得每个枚举元素的名称和值?根据Microsoft文档,Array enumData = Enum.GetValues(e.GetType());应该只返回"指定枚举中的常量值的数组".我假设通过常数,它指的是"经理","咕噜","承包商","副总统",而不是10,1,100和9.那么为什么它返回每一对而不仅仅是名称员工类型?此外,以下代码的输出Console.WriteLine(enumData.GetValue(1));只返回一个值,即"VicePresident",并不像在forloop中那样返回数字9.为什么是这样?

ror*_*.ap 5

Console.WriteLine(String,?Object)使用.NET的"复合格式"功能,当您为它提供枚举值时,它应用"枚举格式字符串":

G或g

如果可能,将枚举条目显示为字符串值,否则显示当前实例的整数值.

因此,您可以嵌入{0:G}字符串以替换枚举名称.虽然没有提到,但{0:G}相当于{0}你在你的例子中观察到的Console.WriteLine("Name: {0},....

D或d

以最短的表示形式将枚举条目显示为整数值.

因此,您可以嵌入{0:D}字符串以替换枚举.