2011年11月23日水曜日

C# : enum型の変数にint値を入れたときの中身

最初にC#について勉強したときに見たはずのことなんですけど、確認しようとして検索してもすぐにはヒットしなかったのでデバッガで見てみました。

enum TestEnum : int
{
    A = 3,
    B = 5,
    C
}

int t1 = 16;
int t2;
TestEnum t3;       // t3 : 0
t3 = TestEnum.A;   // t3 : A
t2 = (int)t3;      // t2 : 3
t3 = TestEnum.B;   // t3 : B
t2 = (int)t3;      // t2 : 5
t3 = TestEnum.C;   // t3 : C
t2 = (int)t3;      // t2 : 6
t3 = (TestEnum)t1; // t3 : 16
t2 = (int)t3;      // t2 : 16

enumの中身は、ただのintですよねぇ。 それだけ。 検索のキーワードがすぐに思いつかなくて、やってみた方が早いってことは多々ありますよね。

お行儀悪いプログラムなので普段のコーディングでコレを書いちゃダメ。 今回試したのは「win32sdkのパラメータを書くときintではなくenumにするとどうなるか?」を確かめるためです。

C言語では多くのパラメータが#defineで書かれています。 win32sdkのパラメータも同様です。 それをC#で扱うときenumにするとちょっと楽。 でも、「想定外の値が戻ってきたらどうなるんだろう?」ってことで確認しました。

ちゃんと仕様を確認しないとダメなんでしょうけど、今回は面倒なのでコレで。