No overload for method の原因と直し方
メソッドの引数の数や型が定義と一致しないときに出ます。オーバーロード解決の仕組みを理解する入り口になります。
エラーメッセージの読み方
Program.cs(4,34): error CS1501: No overload for method 'Add' takes 3 arguments
Program.cs- ファイル名
4- 行番号
34- 列番号 — この位置でコンパイラが解析に失敗しました
CS1501- エラーコード — 検索するとMicrosoftの解説ページが見つかります
No overload for method 'Add' takes 3 arguments- 内容 — 期待していたもの、または受け付けられなかったもの
このエラーが出る典型パターン
パターン1
1 class Program { 2 static int Add(int a, int b) { return a + b; } 3 static void Main(string[] args) { 4 System.Console.WriteLine(Add(1, 2, 3 )); ^ 5 } 6 }
Program.cs(4,34): error CS1501: No overload for method 'Add' takes 3 arguments
Addは引数を2つしか受け取りません。定義と異なる個数で呼び出すとオーバーロードが見つかりません。
直し方: , 3 を (空) にします。
広告
広告スロット(未設定)
パターン2
1 class Program { 2 static int Triple(int a, int b, int c) { return a + b + c; } 3 static void Main(string[] args) { 4 System.Console.WriteLine(Triple(1, 2 )); ^ 5 } 6 }
Program.cs(4,34): error CS7036: There is no argument given that corresponds to the required parameter 'c' of 'Program.Triple(int, int, int)'
Tripleは3つの引数が必須です。1つ足りないとその個数向けのオーバーロードがないと判断されます。
直し方: (空) を , 3 にします。
パターン3
1 class Program { 2 static double Half(double n) { return n / 2; } 3 static void Main(string[] args) { 4 System.Console.WriteLine(Half(4, 2 )); ^ 5 } 6 }
Program.cs(4,34): error CS1501: No overload for method 'Half' takes 2 arguments
Halfは引数を1つしか取りません。余分な引数を渡すと一致するオーバーロードがなくなります。
直し方: , 2 を (空) にします。
よくある誤解
引数の数が定義と1つでも違うと、コンパイラは「一致するオーバーロードがない」と判断します。デフォルト引数がない限り省略はできません。
まとめ
No overload for methodは初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。