Error de coincidencia de parámetros y argumentos

El compilador genera los siguientes errores cuando no hay ningún argumento proporcionado para un parámetro formal o el argumento no es válido para ese parámetro:

  • CS0182: Un argumento de atributo debe ser una expresión constante, una expresión typeof o una expresión de creación de matrices de un tipo de parámetro de atributo
  • CS0591: valor no válido para el argumento para el atributo
  • CS0599:valor no válido para el atributo nombrado 'argument'
  • CS0617: No es un argumento de atributo con nombre válido. Los argumentos de atributo con nombre deben ser campos que no son de solo lectura, estáticos o const, o propiedades de lectura y escritura que son públicas y no estáticas.
  • CS0633: El argumento para el atributo debe ser un identificador válido
  • CS0643: Argumento de atributo con nombre duplicado
  • CS0655: No es un argumento de atributo con nombre válido porque no es un tipo de parámetro de atributo válido
  • CS0839: falta argumento.
  • CS1016: Se esperaba un argumento de atributo con nombre
  • CS1739: La mejor sobrecarga para no tiene un parámetro con nombre
  • CS1740: El argumento con nombre no se puede especificar varias veces
  • CS1742: Es posible que un acceso de matriz no tenga un especificador de argumentos con nombre
  • CS1744 : argumento con nombre especifica un parámetro para el que ya se ha proporcionado un argumento posicional
  • CS1746: El delegado no tiene un parámetro denominado "name"
  • CS7036 : No hay ningún argumento dado que se corresponda con el parámetro necesario
  • CS7067: parámetro del constructor Attribute es opcional, pero no se especificó ningún valor de parámetro predeterminado.
  • CS8324: especificaciones de argumentos con nombre deben aparecer después de especificar todos los argumentos fijos en una invocación dinámica.
  • CS8905: No se puede llamar a un puntero de función con argumentos con nombre.
  • CS8943: null no es un nombre de parámetro válido. Para obtener acceso al receptor de un método de instancia, use la cadena vacía como nombre del parámetro.
  • CS8944: Method no es un método de instancia, por lo que el receptor no puede ser un argumento de controlador de cadenas interpoladas.
  • CS8945: No es un nombre de parámetro válido.
  • CS8948: los argumentos InterpolatedStringHandlerArgumentAttribute no pueden hacer referencia al parámetro en el que se usa el atributo.
  • CS8949: El InterpolatedStringHandlerArgumentAttribute aplicado al parámetro tiene un formato incorrecto y no se puede interpretar. Construya una instancia de ella manualmente.
  • CS8950: El parámetro es un argumento de la conversión del controlador de cadenas interpoladas en el parámetro, pero el argumento correspondiente se especifica después de la expresión de cadena interpolada. Reordene los argumentos.
  • CS8951: El parámetro no se ha proporcionado explícitamente, pero se usa como argumento de la conversión del controlador de cadenas interpoladas en el parámetro.
  • CS8964: La CallerArgumentExpressionAttribute solo se puede aplicar a parámetros con valores predeterminados
  • CS8965: El CallerArgumentExpressionAttribute aplicado al parámetro no tendrá ningún efecto porque es autoreferencial.
  • CS8966 : El CallerArgumentExpressionAttribute no tendrá ningún efecto porque se aplica a un miembro que se usa en contextos que no permiten argumentos opcionales

Falta el argumento

Los siguientes errores generales se emiten cuando el compilador no puede asignar argumentos a todos los parámetros de los miembros:

  • CS0839: Argumento falta.
  • CS7036: No hay ningún argumento dado que corresponde al parámetro necesario

Estos errores son generales: el compilador no puede coincidir con los argumentos proporcionados en una llamada de método a los parámetros necesarios del método. Compruebe las siguientes causas:

  • Asegúrese de incluir todos los argumentos necesarios.
  • Asegúrese de que los argumentos están en el orden correcto.
  • Asegúrese de que todos los argumentos son el tipo correcto.
  • Asegúrese de que las reglas de resolución de sobrecarga elijan el método esperado.

También podrías ver CS7036 si escribiste funciones locales sobrecargadas. Las funciones locales no se pueden sobrecargar. El compilador solo reconoce la primera función local con ese nombre. Compruebe si quiere llamar a una función local diferente.

Estos errores a menudo aparecen con otros diagnósticos que pueden ayudar a diagnosticar la causa correcta.

Argumentos para atributos

El compilador emite estos errores cuando un argumento para un constructor de atributos es incorrecto:

  • CS0182: Un argumento de atributo debe ser una expresión constante, una expresión typeof o una expresión de creación de matrices de un tipo de parámetro de atributo
  • CS0591: Valor no válido para el argumento del atributo
  • CS0599: Valor no válido para el argumento 'argument' del atributo con nombre
  • CS0617: No un argumento de atributo con nombre válido. Los argumentos de atributo con nombre deben ser campos que no son de solo lectura, estáticos o const, o propiedades de lectura y escritura que son públicas y no estáticas.
  • CS0633: El argumento para el atributo debe ser un identificador válido
  • CS0643: Argumento de atributo con nombre duplicado
  • CS0655: no es un argumento de atributo con nombre válido porque no es un tipo de parámetro de atributo válido

Si usa la System.AttributeUsageAttribute en la definición de atributo, asegúrese de que los valores permitidos no son mutuamente excluyentes. Compruebe que el tipo y el orden de los argumentos para el atributo son correctos. Asegúrese de que el texto de los argumentos de cadena es válido. Para muchos atributos, el argumento debe ser un identificador de C# válido. Los argumentos para los constructores de atributos deben ser constantes en tiempo de compilación. Por lo tanto, se limitan a los tipos que admiten constantes literales. Además, los siguientes tipos que permiten constantes literales no se permiten como parámetros de atributo:

No se pueden especificar argumentos con nombre repetidos con el mismo nombre de parámetro. Solo puede establecer propiedades accesibles al inicializar un atributo. No se pueden establecer propiedades privadas.

Parámetros y argumentos con nombre y opcionales

El compilador emite los siguientes errores debido al uso incorrecto de argumentos con nombre y opcionales.

  • CS1016: Se esperaba un argumento de atributo con nombre
  • CS1739: La mejor sobrecarga para no tiene un parámetro con nombre
  • CS1740: El argumento con nombre no se puede especificar varias veces
  • CS1742: Es posible que un acceso de matriz no tenga un especificador de argumentos con nombre
  • CS1744: El argumento nombrado especifica un parámetro al que ya se le ha dado un argumento posicional
  • CS1746: El delegado no tiene un parámetro denominado "name"
  • CS7067: el parámetro del constructor "Attribute" es opcional, pero no se especificó ningún valor de parámetro predeterminado.
  • CS8324: Las especificaciones de argumento con nombre deben aparecer después de haber especificado todos los argumentos fijos en una invocación dinámica.
  • CS8905: No se puede llamar a un puntero de función con argumentos con nombre.

Compruebe las siguientes causas de estos errores:

  • El nombre del parámetro en el argumento nombrado es incorrecto.
  • La sobrecarga elegida no tiene un parámetro que coincida con el argumento nombrado.
  • Se repite un nombre de parámetro en más de un argumento.
  • Aparece un argumento posicional (sin nombre) después de los argumentos con nombre.
  • No se permiten argumentos con nombre para los parámetros de índice de matriz.

Controlador de cadenas interpoladas

El compilador emite los siguientes errores al especificar un controlador de cadenas interpolado incorrectamente.

  • CS8943: null no es un nombre de parámetro válido. Para obtener acceso al receptor de un método de instancia, use la cadena vacía como nombre del parámetro.
  • CS8944: No es un método de instancia, por lo que el receptor no puede ser un argumento de un controlador de cadenas interpoladas.
  • CS8945: No es un nombre de parámetro válido.
  • CS8948: los argumentos InterpolatedStringHandlerArgumentAttribute no pueden hacer referencia al parámetro en el que se usa el atributo.
  • CS8949: El InterpolatedStringHandlerArgumentAttribute aplicado al parámetro tiene un formato incorrecto y no se puede interpretar. Construya una instancia manualmente.
  • CS8950: El parámetro es un argumento de la conversión del controlador de cadenas interpoladas en el parámetro, pero el argumento correspondiente se especifica después de la expresión de cadena interpolada.
  • CS8951: El parámetro no se ha proporcionado explícitamente, pero se usa como argumento de la conversión del controlador de cadenas interpoladas en el parámetro.

Un controlador de cadenas interpolado es una construcción basada en patrones. Es importante obtener el patrón correcto. Consulte la especificación de características de o siga el tutorial sobre la creación de un controlador de cadenas interpoladas .

Información de depuración de llamador

El compilador emite el siguiente error en un uso incorrecto del System.Runtime.CompilerServices.CallerArgumentExpressionAttribute:

  • CS8964: La CallerArgumentExpressionAttribute solo se puede aplicar a parámetros con valores predeterminados

Además, el compilador emite las siguientes advertencias sobre un uso incorrecto del CallerArgumentExpressionAttribute:

  • CS8965: El CallerArgumentExpressionAttribute aplicado al parámetro no tendrá ningún efecto porque es autoreferencial.
  • CS8966: El CallerArgumentExpressionAttribute no tendrá ningún efecto porque se aplica a un miembro que se usa en contextos que no permiten argumentos opcionales

Cualquier parámetro anotado con el atributo CallerArgumentExpression debe tener un valor predeterminado.