Use of unassigned local variable の原因と直し方
ローカル変数は宣言しただけでは値を持ちません。条件分岐をまたいだ使用で見落としがちなエラーです。
エラーメッセージの読み方
Program.cs(4,34): error CS0165: Use of unassigned local variable 'count'
Program.cs- ファイル名
4- 行番号
34- 列番号 — この位置でコンパイラが解析に失敗しました
CS0165- エラーコード — 検索するとMicrosoftの解説ページが見つかります
Use of unassigned local variable 'count'- 内容 — 期待していたもの、または受け付けられなかったもの
このエラーが出る典型パターン
パターン1
1 class Program { 2 static void Main(string[] args) { 3 int count; ^ 4 System.Console.WriteLine(count); 5 } 6 }
Program.cs(4,34): error CS0165: Use of unassigned local variable 'count'
ローカル変数はJavaと違いデフォルト値を持ちません。宣言しただけでは未代入のままです。
直し方: ; を = 0; にします。
広告
広告スロット(未設定)
パターン2
1 class Program { 2 static void Main(string[] args) { 3 string name; ^ 4 System.Console.WriteLine(name); 5 } 6 }
Program.cs(4,34): error CS0165: Use of unassigned local variable 'name'
参照型のローカル変数も未代入のままでは使えません。nullで初期化することはできますが空文字とは違います。
直し方: ; を = ""; にします。
パターン3
1 class Program { 2 static void Main(string[] args) { 3 int a; 4 if (args.Length > 0) { 5 a = 1; 6 } 7 System.Console.WriteLine(a ); ^ 8 } 9 }
Program.cs(7,34): error CS0165: Use of unassigned local variable 'a'
args.Lengthは実行するまで分からない値です。コンパイラはif文が必ず実行されるとは判断できないため、aが確実に代入される保証がないとみなします。
直し方: a を 1 にします。
よくある誤解
C#のローカル変数はJavaのフィールドと違ってデフォルト値を持ちません。条件分岐の中でしか代入されない変数は、実行時ではなくコンパイル時に弾かれます。
まとめ
Use of unassigned local variableは初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。