为什么将值分配给c#?
中的某些常数名称时枚举输出有所不同代码:
class Program
{
enum months { jan, feb, march, april, may, june = 100, july, aug, sept, oct = 0, nov, dec };
static void Main(string[] args)
{
Console.WriteLine("January " + months.jan + " " + (int)months.jan);
Console.WriteLine("february " + months.feb + " " + (int)months.feb);
Console.WriteLine("March " + months.march + " " + (int)months.march);
Console.WriteLine("April " + months.april + " " + (int)months.april);
Console.WriteLine("May " + months.may + " " + (int)months.may);
Console.WriteLine("June " + months.june + " " + (int)months.june);
Console.WriteLine("July " + months.july + " " + (int)months.july);
Console.WriteLine("Augest " + months.aug + " " + (int)months.aug);
Console.WriteLine("September " + months.sept + " " + (int)months.sept);
Console.WriteLine("October " + months.oct + " " + (int)months.oct);
Console.WriteLine("November " + months.nov + " " + (int)months.nov);
Console.WriteLine("December " + months.dec + " " + (int)months.dec);
Console.ReadKey();
}
}
输出:
January jan 0
february feb 1
March dec 2
April april 3
May may 4
June june 100
July july 101
Augest aug 102
September sept 103
October jan 0
November feb 1
December dec 2
为什么上述代码的输出:"月。请在此帮助我?
您为枚举设置了一些值,这将迫使内部值点重置为最后使用的值。当您将october
设置为零时,november
的下一个枚举价值将为1
。因此,只需省略它们:
enum months { jan, feb, march, april, may, june, july, aug, sept, oct, nov, dec };
说这多个枚举价值可以代表相同的整数值,就像您的示例jan
和oct
中一样,它们都将评估为零。
请查看它说的文档:
默认情况下,第一个枚举器具有值0,每个连续枚举器的值增加了1。
(msdn(
当您明确为枚举设置值时,下一个枚举会将该值提高1。当您重新记录一个值时,这也会发生(就像十月一样(。
这主要是基于假设,但作为尝试专门回答您的问题的一种尝试:
为什么上述代码的输出:"月。请在此帮助我?
您的行:
Console.WriteLine("December " + months.dec + " " + (int)months.dec);
在枚举值上运行.ToString()
。通过阅读枚举源,我们走下了以下路径:
-
ToString()
-
InternalFormat
-
GetName
-
GetEnumName
-
GetEnumRawConstantValues
-
GetEnumData
。
如果我是对的(并且欢迎其他人说我是否在误解(,这似乎会构建两个数组,一个值和一个字符串表示。至关重要的是,这里只能在此处链接到每个值。
如果列表按字母顺序循环(这可以解释为何为" DEC"one_answers" MAR"选择" DEC",但为" feb"one_answers" feb"one_answers" nov"(,只是第一个有效的值添加到列表中。因此,它返回2
的dec
,但feb
用于1
。