枚举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值的枚举,是否有一些特殊的东西可以在这样的情况下获得特殊处理?

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

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