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; にします。
パターン4
1 class Program { 2 static int Square(int n) { 3 int r = n * n; 4 ^ 5 } 6 static void Main(string[] args) { 7 System.Console.WriteLine(Square(4)); 8 } 9 }
Program.cs(2,16): error CS0161: 'Program.Square(int)': not all code paths return a value
int型を返すメソッドは、すべての実行経路でreturn文が必要です。
直し方: (空) を return r; にします。
パターン5
1 class Program { 2 static bool IsEven(int n) { 3 if (n % 2 == 0) { 4 return true; 5 } 6 ^ 7 } 8 static void Main(string[] args) { 9 System.Console.WriteLine(IsEven(3)); 10 } 11 }
Program.cs(2,17): error CS0161: 'Program.IsEven(int)': not all code paths return a value
if分岐にしかreturnが無いと、それ以外の経路の戻り値が保証されません。
直し方: (空) を return false; にします。
よくある誤解
if文の中だけにreturnがあっても、else に相当する経路が無い場合はコンパイルエラーになります。すべての実行経路を確認する必要があります。
実務での勘所
この検査は、単に「return文がその関数のどこかに書いてあるか」ではなく、制御フローの解析によって「そのメソッドの末尾に到達しうるかどうか」を厳密に追跡しています。たとえばwhile (true) { ... }のように、途中でreturnやbreakによる脱出が無い無限ループで終わるメソッドは、コンパイラが「末尾に到達することは無い」と判断できるため、return文が1つも無くてもエラーになりません。「returnを書いたかどうか」ではなく「末尾に届く経路が本当に存在するか」で判定されている、という理解が正確です。