Code Fix

初級

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パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

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