酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

列挙型変数に0が代入できる

http://msdn.microsoft.com/ja-jp/library/aa691283.aspx

暗黙の列挙値変換を利用すると、decimal-integer-literal の 0 を任意の列挙型に変換できます。

暗黙の列挙値変換があるのを初めて知りました。ちょっとビックリ

例えばこんな型があるとします。

enum NekoTypes
{
    Mike,
    Kuro,
    Shiro
}

結構長いことC#を使っているので、下記のような整数リテラルを代入するコードはコンパイルエラーが発生するのを経験的に知っていています。

   NekoTypes type = 1; // コンパイルエラー

列挙型に整数リテラルを代入するときは、キャストして使っていたような気がします。

   NekoTypes type = (NekoTypes)1; // エラーにならない

整数リテラルでも0の場合は、暗黙の列挙値変換でコンパイルエラーになりません。

   NekoTypes type = 0; // エラーにならない

初めて知って「おおっ!」と思ったのでメモしておきます。なんで0の時だけ暗黙の列挙数値変換の仕様があるのかは不明の模様。