为什么在将值分配给其C#中的某些常数名称时,为什么枚举输出有所不同



为什么将值分配给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 };

说这多个枚举价值可以代表相同的整数值,就像您的示例janoct中一样,它们都将评估为零。

请查看它说的文档:

默认情况下,第一个枚举器具有值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"(,只是第一个有效的值添加到列表中。因此,它返回2dec,但feb用于1

最新更新