未到達コード

C#では未初期化の変数はコンパイルエラーが出る。


int result;
switch (value){
case 0: result = someAPI1(); break;
case 1: result = someAPI2(); break;
case 2: result = someAPI3(); break;
}
if (result!=0) error();

のようなコードを書く場合がある。caseは0,1,2の場合以外はありえないとしても、これはresultが未初期化なのでコンパイルエラーとなる。int result = 0;と書けばいいじゃないかと言われるかも知れないが、そのあと必ず再代入されるのでそんなコードは是が非でも書きたくない。


私は、case文の下に一行追加することにした。


default : throw null;

我ながら名案!と思って、C#を長年使っている人に見せたら「ハァ?」と言われた。


普通、やりませんか、そうですか..orz