Code Fix

初級

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が確実に代入される保証がないとみなします。

直し方: a1 にします。

この問題を解いてみる →

よくある誤解

C#のローカル変数はJavaのフィールドと違ってデフォルト値を持ちません。条件分岐の中でしか代入されない変数は、実行時ではなくコンパイル時に弾かれます。

まとめ

Use of unassigned local variableは初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)