Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 关于Enum.GetValues()返回值的混淆_C#_Enums_Enumeration - Fatal编程技术网

C# 关于Enum.GetValues()返回值的混淆

C# 关于Enum.GetValues()返回值的混淆,c#,enums,enumeration,C#,Enums,Enumeration,我在一本书中阅读了有关枚举的内容,并给出了以下代码示例: namespace FunWithEnums { enum EmpType : byte { Manager = 10, Grunt = 1, Contractor = 100, VicePresident = 9 } class Program { static void Main(string[] args)

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

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中打印出的内容感到非常困惑。 输出是

名称:Grunt,值:1

姓名:副总裁,值:9

姓名:经理,价值:10

名称:承包商,价值:100

但是它如何获得每个枚举元素的名称和值呢?根据Microsoft文档,数组enumData=Enum.GetValuese.GetType;应该只返回指定枚举中常量值的数组。我假设通过常量,它指的是经理、格鲁特、承包商、副总裁,而不是10、1100和9。那么,为什么要返回每一对,而不仅仅是员工类型的名称呢?此外,以下代码Console.writelinenumdata.GetValue1的输出;只返回一个值,即VicePresident,它不会像forloop中那样返回数字9。这是为什么?

使用,当您为其提供枚举值时,它适用于:

G或G

如果需要,将枚举项显示为字符串值 可能,否则显示当前值的整数值 例如

因此,您可以在字符串中嵌入{0:G}以替换枚举名。尽管没有提到,{0:G}相当于{0},这是您在示例中观察到的Console.WriteLineName:{0}

D还是D

将枚举项显示为最短路径中的整数值 代表性是可能的


因此,可以在字符串中嵌入{0:D}以替换枚举值

代码显式打印值两次

Console.WriteLine("Name: {0}, Value: {0:D}", enumData.GetValue(i));

第一个{0}只打印原始值,第二个具有指定格式的D

GetValue返回枚举值对象。此对象属于类Enum类,该类将使用其名称强制转换为字符串,或使用其值强制转换为整数。因此,当字符串格式化需要一个字符串时,它就会得到它。当它要求使用十进制格式说明符D时,枚举值将为其提供默认的基础值Int32,该值很容易转换为十进制。

这些值将按给定的格式打印出来。尝试删除{0:D},只使用{0}。与在创建的列表中一样,在以下位置为列表指定类型:

        Array enumData = Enum.GetValues(e.GetType());

我想:这就是你的问题所在。你们编造了一个关于常数值的含义的故事。程序的输出表明故事显然是错误的。因此,从输出中学习,尝试构建一个新的故事,它与你面前的事实相一致。因此,当它指的是常量时,它指的是名称-值对,而不仅仅是名称?不是值对,一个具有方法、成员变量和父类的对象,以及哪个Console.WriteLine将在需要字符串时查询其字符串表示形式,以及在需要字符串时查询其数字表示形式。@FrostyStraw Right,.NET枚举常量是包含stuff的对象。它不像C中的枚举。因此GetValue返回一个对象,因为数组enumData包含对象,这要归功于用于填充数组的enum.GetValues方法?是的,GetValues为您提供一个值数组,每个值都是enum类。在循环中,您可以执行类似于e.GetValues Console.WriteLineName:{0}中的foreach var值的操作,值:{0:D},值;看看这里的例子:是的,关于表达式的正确语法,您是完全正确的。我的错误。