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.为什么是这样?
Console.WriteLine(String,?Object)
使用.NET的"复合格式"功能,当您为它提供枚举值时,它应用"枚举格式字符串":
G或g
如果可能,将枚举条目显示为字符串值,否则显示当前实例的整数值.
因此,您可以嵌入{0:G}
字符串以替换枚举名称.虽然没有提到,但{0:G}
相当于{0}
你在你的例子中观察到的Console.WriteLine("Name: {0},...
.
D或d
以最短的表示形式将枚举条目显示为整数值.
因此,您可以嵌入{0:D}
字符串以替换枚举值.