not all code paths return a value の原因と直し方
値を返すと宣言したメソッドで、すべての実行経路にreturn文があるかをコンパイラが検証します。
エラーメッセージの読み方
Program.cs(2,16): error CS0161: 'Program.Twice(int)': not all code paths return a value
Program.cs- ファイル名
2- 行番号
16- 列番号 — この位置でコンパイラが解析に失敗しました
CS0161- エラーコード — 検索するとMicrosoftの解説ページが見つかります
'Program.Twice(int)': not all code paths return a value- 内容 — 期待していたもの、または受け付けられなかったもの
このエラーが出る典型パターン
パターン1
1 class Program { 2 static int Twice(int n) { 3 int r = n * 2; 4 ^ 5 } 6 static void Main(string[] args) { 7 System.Console.WriteLine(Twice(3)); 8 } 9 }
Program.cs(2,16): error CS0161: 'Program.Twice(int)': not all code paths return a value
int型を返すと宣言したメソッドは、すべての実行経路でreturn文が必要です。
直し方: (空) を return r; にします。
広告
広告スロット(未設定)
パターン2
1 class Program { 2 static bool IsPositive(int n) { 3 if (n > 0) { 4 return true; 5 } 6 ^ 7 } 8 static void Main(string[] args) { 9 System.Console.WriteLine(IsPositive(-1)); 10 } 11 }
Program.cs(2,17): error CS0161: 'Program.IsPositive(int)': not all code paths return a value
if分岐にしかreturnがありません。elseに相当する経路にもreturnが必要です。
直し方: (空) を return false; にします。
パターン3
1 class Program { 2 static string Greet(string name) { 3 string msg = "Hi, " + name; 4 ^ 5 } 6 static void Main(string[] args) { 7 System.Console.WriteLine(Greet("A")); 8 } 9 }
Program.cs(2,19): error CS0161: 'Program.Greet(string)': not all code paths return a value
string型を返すと宣言した以上、最後まで到達する経路にもreturn文が必要です。
直し方: (空) を return msg; にします。
よくある誤解
if文の中だけにreturnがあっても、else に相当する経路が無い場合はコンパイルエラーになります。すべての実行経路を確認する必要があります。
まとめ
not all code paths return a valueは初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。