【发布时间】:2015-04-01 17:27:13
【问题描述】:
在搞乱枚举时,我发现我的一个枚举有一个奇怪的行为。
考虑以下代码:
static void Main()
{
Console.WriteLine("Values");
Console.WriteLine();
foreach (Month m in Enum.GetValues(typeof(Month)))
{
Console.WriteLine(m.ToString());
}
Console.WriteLine();
Console.WriteLine("Names");
Console.WriteLine();
foreach (var m in Enum.GetNames(typeof(Month)))
{
Console.WriteLine(m);
}
Console.ReadLine();
}
public enum Month
{
January,
May,
March,
April
}
此代码产生以下输出(如预期的那样):
Values
January
May
March
April
Names
January
May
March
April
现在,假设我改变了一点我的枚举,像这样:
public enum Month
{
January = 3,
May,
March,
April
}
如果我运行相同的代码,会出现相同的结果(这很奇怪)。现在,如果我像这样更改我的枚举:
public enum Month
{
January = "g",
May,
March,
April
}
我得到以下编译器错误:
无法将类型“string”隐式转换为“int”。
为什么编译器允许我将枚举的值之一设置为 3,而不是 g?为什么第一个结果和第二个结果一模一样?如果我更改了 January 的值,那为什么GetValues 不打印 3?
【问题讨论】:
-
枚举是整数。当您看到一个单词
January时,它的值为 1。(或在您的第二个示例中指定为 3)但它不能具有g的值。 -
阅读stackoverflow.com/a/16039343/380384,看看你可以用
enum做什么。