【C#】enumのメンバーに任意の番号を振る

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される
}

一般的に

  • 基本的にメンバーを追加するときは末尾に追加していく
  • 途中にメンバーを追加しない

で、問題が発生する場合は

  • 途中に追加する場合、既存のメンバーの数値を変えないように値を明示して調整する

のような運用が考えられます。

関連リンク

takap-tech.com