構文スコープで外部変数に代入したい
変数nを用意して、分岐・ループの中でnに違う値を代入して、入った値をスコープ終了後に反映させるようにしたい。
ただ、ここで
switch文なら
var n; switch(x) { case 1: n = 1; break; case 2: n = 2; break; }
if文なら
var n; if(x == 1) { n = 1; } else { n = 2; }
for文なら
var n; for (int i = 0; i < 100; i++) { n = i; }
という風に初期値を入れずに書いてしまうと、ブロックのどこかを必ず通るようになっていても「未割り当てのローカル変数が使用されました。」のコンパイルエラーになる。
C#の「null参照の危険性がありますよ」的なことを警告してくれる親切心で、対処はブロック侵入前にnに値を代入しておくこと。
var n = null; if(x == 1) { n = 1; } else { n = 2; }
switch文ならスコープ内にdefaultを入れることでも解決できる。
var n; switch(x) { case 1: n = 1; break; case 2: n = 2; break; default: n = 0; break; }
「未割り当てのローカル変数が使用されました。」はよく出るけど、「値が代入されるように記述されていない」か、この構文スコープの問題で発生してることが多いから、慌てずデバッグするんだぞ。