Przykład Kod:Enum wartość 0 niespójność
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);
}
kod w linii C nie kompilowania, ale linia A kompiluje. Czy jest coś wyjątkowego w enum z wartością 0, która traktuje to jako specjalne traktowanie w takich przypadkach?
Tak. Tutaj "0" oznacza domyślnie. Co znaczy "1"? –
@ David: Nic. 'Foods food = 1;' nie skompilowałoby się. Można jednak * rzucić * dowolny literał do wyliczenia, więc "Żywność jedzenie = (Żywność) 1;" jest w porządku. –
Anthony ma rację. Powodem, dla którego można niejawnie przekonwertować literalne zero do dowolnego typu wyliczeniowego, jest to, że projektanci języka stwierdzili, że jest to przydatna funkcja i zapisali ją w specyfikacji. – phoog