Error del compilador · error CS1501 / CS7036
Ninguna sobrecarga del método 'X' toma N argumentos
Tu llamada y la lista de parámetros no se ponen de acuerdo en la cantidad. CS1501 es la variante de "demasiados argumentos"; CS7036 salta cuando un parámetro requerido no recibió argumento alguno.
Mira ambos ocurrir
Console.WriteLine(Math.Max(3)); // Max necesita DOS valores para comparar — le diste uno
void MostrarPuntos(string nombre, int puntos)
{
Console.WriteLine(nombre + ": " + puntos);
}
MostrarPuntos("Ada"); // 'puntos' nunca recibió valor — CS7036 lo nombra
Solución 1: dale al método lo que pide
Console.WriteLine(Math.Max(3, 7));
void MostrarPuntos(string nombre, int puntos)
{
Console.WriteLine(nombre + ": " + puntos);
}
MostrarPuntos("Ada", 95);
El diagnóstico nombra el parámetro exacto que dejaste sin argumento — léelo, consulta la firma (F12 / Ir a definición en Visual Studio) y empareja nombres con posiciones uno a uno.
Solución 2: si querías que fuera opcional, decláralo opcional
void MostrarPuntos(string nombre, int puntos = 0) // el valor por defecto lo hace opcional
{
Console.WriteLine(nombre + ": " + puntos);
}
MostrarPuntos("Ada"); // puntos cae al valor por defecto 0
MostrarPuntos("Bob", 95);
Los parámetros opcionales se rellenan desde la derecha — puedes omitir puntos pero nunca nombre. Por eso los opcionales deben ir después de los obligatorios.
La confusión de las sobrecargas
Mismo nombre con listas de parámetros distintas = sobrecargas. El compilador elige por cantidad y tipos — cuando ninguna coincide, obtienes CS1501 aunque exista un método con ese nombre:
void Imprimir(int x) { … }
void Imprimir(string s) { … }
void Imprimir(int x, int y) { … }
Imprimir(1); // ✓ la primera sobrecarga
Imprimir("hola"); // ✓ la segunda
Imprimir(1, 2); // ✓ la tercera
Imprimir(1.5); // ✗ territorio CS1503/CS1501: no existe Imprimir(double)
Preguntas frecuentes
¿Cómo corrijo CS1501?
El número de argumentos no coincide con ninguna sobrecarga. Cuenta contra la firma — CS7036 nombra el parámetro olvidado. Pasa los que faltan o declara un valor por defecto.
¿Diferencia entre CS1501 y CS7036?
CS1501: "ninguna sobrecarga acepta N argumentos" (demasiados). CS7036: nombra el parámetro requerido sin argumento (muy pocos).
Lista de comprobación
- Cuenta tus argumentos contra la firma — el texto del error contiene ambos números.
- CS7036 nombra el parámetro que olvidaste — normalmente el segundo o el tercero.
- Parámetros opcionales: declara un valor por defecto y recuerda que se rellenan desde la derecha.
- Los argumentos con nombre rescatan un orden raro:
MostrarPuntos(puntos: 95, nombre: "Ada"). - Relacionado: CS1729 es este mismo error en constructores.