列挙型を使う
http://blogs.wankuma.com/rti/archive/2007/03/12/66244.aspx
列挙型を使う(その2)
http://blogs.wankuma.com/rti/archive/2007/03/13/66420.aspx
列挙型を使う(その3)
http://blogs.wankuma.com/rti/archive/2007/03/14/66719.aspx
の続きです。
例えば、C# によって以下のような列挙型を指定したとします。
enum 血液型 { A, B, O }
この血液型という列挙型は、血液型として取り扱えるため、つい「A, B」という値として取り扱ってしまい、実際には int 型 で取り扱われていることを、忘れてしまいそうになります。
そんな状態で、例えば、コンボボックスなどで選択した血液型の結果の値を、データベースの「カルテ」という名のテーブルに格納したとします。
その後、先ほどの血液型の「A」と「B」の間に 「AB」型を加えた(あるいは、並べ替えた)とします。
enum 血液型 { A, AB, B, O }
しかし、カルテテーブルには数値で登録されているため、例えば、今まで O 型の血液型とされていた人が B 型として取り扱われることになってしまいます。
これは、とっても
恐ろしい
ことです。
さて、性格と称する列挙型を設けたとします。
enum 性格 { A, B, O, AB, 理解不能 }
性格は、最初からわからないので、初期値を先ほどの血液型の値から設定することにします。
性格 x = (性格)血液型.O;
しかし、よく見ると列挙されている内容の並びが血液型と性格で異なってしまっています。
これによって、x は AB の値が登録されることになります。
また、以下のような書き方も、混乱を招きます。
if (性格.B.Equals(血液型.B)) {
return "この人は、血液型通り B型な性格のようです。";
}
列挙型は、内容が直感的にわかるため便利ではありますが、実際には対応する値を持ち、この値が実体であるということを常に念頭におく必要がある点に注意して下さい。