列挙型とswitch文
仕事でコードを書いていて、アレ?っと一瞬悩みました。
static void Foo (MessageBoxIcon icon) { switch (icon) { case MessageBoxIcon.Information: break; case MessageBoxIcon.Warning: break; case MessageBoxIcon.Exclamation: break; case MessageBoxIcon.Error: break; } }
なんの変哲もないコードですが、コンパイルが通りません。原因はなんだと思いますでしょうか?
エラー内容は、以下の通り。
ラベル 'case 48:' は既にこの switch ステートメントで使用されています。
このエラーで気づいたんですが、WarningとExclamationの値が同じなんですよね。折角、列挙型を使ってマジックナンバーを隠して抽象化していたのに、switchによって暴かれてしまいました。同じ値を持つ列挙型というのは、ちょっと危険かも知れませんね。