10
例コード:線Cで列挙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);
}
コードはコンパイルされませんが、ラインAは正常にコンパイル。 このような場合に特別な扱いを受ける0の値を持つ列挙型の特別なものはありますか?
はい。ここで、「0」はデフォルトを意味します。 「1」とはどういう意味ですか? –
@David:何もありません。 'Foods food = 1;'はコンパイルされません。しかし、任意のリテラルを列挙型にキャストすることができるので、 'Foods food =(Foods)1;'はうまくいきます。 –
アンソニーが正しいです。リテラルゼロを任意の列挙型に暗黙的に変換できる理由は、言語設計者が有用な機能であると判断し、仕様に記述したためです。 – phoog