enum は宣言した順に数字が自動で振られています。
以下の例だと Apple=0, Banana=1 といように自動でインクリメントされた数字が割り当てられます。なのでメンバーを途中に追加すると数値が変わってしまいます。
public enum Type { Apple, // 0 Banana, // 1 Orange, // 2 Grape, // 3 Watermelon // 4 } // 途中に追加すると暗黙の数字がずれる public enum Type { Apple, // 0 Banana, // 1 Orange, // 2 Cherry, // 3 ★追加 Grape, // 4 Watermelon // 5 後ろはずれてしまう }
enum は途中にメンバーを追加しない、は、割とありますが任意で番号を与えることもできます。
// 各シンボルの数値を明示する public enum Type { Apple = 0, Banana = 1, Orange = 2, Cherry = 5, Grape = 3, Watermelon = 4 } // 明示しない場合+1される public enum Type { Apple = 0, Banana, // 2 ★省略すると+1されていく Orange, // 3 Cherry = 5, // 5 Grape = 3, // 3 Watermelon // 4 ★自動的に3から+1される }
一般的に
- 基本的にメンバーを追加するときは末尾に追加していく
- 途中にメンバーを追加しない
で、問題が発生する場合は
- 途中に追加する場合、既存のメンバーの数値を変えないように値を明示して調整する
のような運用が考えられます。