我正在阅读一本书中有关枚举的内容,并给出了以下代码示例:
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();
        }
}我很困惑在forloop中打印的是什么。输出是
名称:咕噜,值:1 名称: VicePresident,值:9 名称:经理,价值: 10 名称:承包商,价值: 100
但是它如何同时获得每个枚举元素的名称和值?根据Microsoft文档,Array enumData = Enum.GetValues(e.GetType());只应返回“指定枚举中常量值的数组”。我假设按常量计算,它指的是"Manager“、"Grunt”、"Contractor“、"VicePresident",而不是10、1、100和9。那么它为什么要返回每一对而不是只返回雇员类型的名称呢?另外,下面的代码Console.WriteLine(enumData.GetValue(1));的输出只返回一个值,即"VicePresident“,并且不像for循环中那样返回数字9。为什么会这样呢?
发布于 2016-08-05 14:37:40
GetValue返回枚举值对象。此对象属于类(Enum类),该类将转换为具有其名称的字符串,或转换为具有其值的整数。因此,当字符串格式需要一个字符串时,它就会得到该字符串。当它请求一个十进制(格式说明符D)时,枚举值给它默认的基础值,即Int32,它很容易转换成一个十进制。
发布于 2016-08-05 14:33:45
Console.WriteLine(String, Object)使用.NET的“复合格式”特性,当您为它提供枚举值时,它应用“枚举格式字符串”
如果可能,G或g将枚举项显示为字符串值,否则将显示当前实例的整数值。
因此,您可以在字符串中嵌入{0:G}以替代枚举名称。虽然没有提到,但{0:G}等同于{0},这就是您在使用Console.WriteLine("Name: {0},...的示例中看到的。
D或d以尽可能最短的表示形式将枚举项显示为整数值。
因此,您可以在字符串中嵌入{0:D}以替换枚举值。
发布于 2016-08-05 14:35:47
该代码将显式地打印该值两次。
Console.WriteLine("Name: {0}, Value: {0:D}", enumData.GetValue(i));第一个{0}只打印原始值,第二个格式指定(D)。
https://stackoverflow.com/questions/38791749
复制相似问题