枚举0值不一致

时间:2012-02-16 03:09:57

标签: c# c#-4.0

示例代码:

    public enum Foods
    {
        Burger,
        Pizza,
        Cake
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Eat(0);   // A
        Eat((Foods)0);  // B
        //Eat(1);  // C : won't compile : cannot convert from 'int' to 'Foods'
        Eat((Foods)1);  // D    
    }

    private void Eat(Foods food)
    {
        MessageBox.Show("eating : " + food);
    }

C行的代码无法编译,但A行编译正常。 有一个0值的枚举是否有特殊处理在这样的情况下得到特殊处理?

1 个答案:

答案 0 :(得分:14)

是的,文字0可以隐式转换为任何枚举类型,并表示该类型的默认值。根据C#语言规范,特别是关于枚举的第1.10节:

  

任何枚举类型的默认值是转换为枚举类型的整数值零。在变量自动初始化为默认值的情况下,这是给予枚举类型变量的值。为了使枚举类型的默认值易于使用,文字0隐式转换为任何枚举类型。对于容易获得的枚举类型的默认值,文字0隐式转换为任何枚举类型。