Incompatibilidade de parâmetros e argumentos

O compilador gera os seguintes erros quando não há nenhum argumento fornecido para um parâmetro formal ou o argumento não é válido para esse parâmetro:

  • CS0182: Um argumento de atributo deve ser uma expressão constante, expressão typeof ou expressão de criação de matriz de um tipo de parâmetro de atributo
  • CS0591: Valor inválido para o argumento do atributo
  • CS0599: valor inválido para o argumento de atributo nomeado 'argument'
  • CS0617: Não é um argumento de atributo nomeado válido. Os argumentos de atributo nomeados devem ser campos que não são readonly, estáticos ou const ou propriedades de leitura-gravação que são públicas e não estáticas.
  • CS0633: O argumento para o atributo deve ser um identificador válido
  • CS0643: argumento de atributo nomeado duplicado
  • CS0655: Não é um argumento de atributo nomeado válido porque não é um tipo de parâmetro de atributo válido
  • CS0839: argumento ausente.
  • CS1016: argumento de atributo nomeado esperado
  • CS1739: a melhor sobrecarga para não ter um parâmetro nomeado
  • CS1740: Argumento nomeado não pode ser especificado várias vezes
  • CS1742: Um acesso de matriz pode não ter um especificador de argumento nomeado
  • CS1744: argumento Nomeado especifica um parâmetro para o qual um argumento posicional já foi fornecido
  • CS1746: O delegado não tem um parâmetro chamado 'name'
  • CS7036: Não há nenhum argumento fornecido que corresponda ao parâmetro necessário
  • CS7067: o parâmetro do construtor de atributo é opcional, mas nenhum valor de parâmetro padrão foi especificado.
  • CS8324: Especificações de argumento nomeado devem aparecer depois que todos os argumentos fixos tiverem sido especificados em uma invocação dinâmica.
  • CS8905: um ponteiro de função não pode ser chamado com argumentos nomeados.
  • CS8943: nulo não é um nome de parâmetro válido. Para obter acesso ao receptor de um método de instância, use a cadeia de caracteres vazia como o nome do parâmetro.
  • CS8944: O método não é um método de instância, portanto, o receptor não pode ser um argumento de manipulador de cadeia de caracteres interpolada.
  • CS8945: Não é um nome de parâmetro válido.
  • CS8948: InterpolatedStringHandlerArgumentAttribute argumentos não podem se referir ao parâmetro no qual o atributo é usado.
  • CS8949: O InterpolatedStringHandlerArgumentAttribute aplicado ao parâmetro é malformado e não pode ser interpretado. Construa uma instância dele manualmente.
  • CS8950: parâmetro é um argumento para a conversão de manipulador de cadeia de caracteres interpolada no parâmetro, mas o argumento correspondente é especificado após a expressão de cadeia de caracteres interpolada. Reordene os argumentos.
  • CS8951: o parâmetro não é fornecido explicitamente, mas é usado como um argumento para a conversão de manipulador de cadeia de caracteres interpolada no parâmetro.
  • CS8964: O CallerArgumentExpressionAttribute só pode ser aplicado a parâmetros com valores padrão
  • CS8965: o CallerArgumentExpressionAttribute aplicado ao parâmetro não terá efeito porque ele é auto-referencial.
  • CS8966: O CallerArgumentExpressionAttribute não terá efeito porque se aplica a um membro que é usado em contextos que não permitem argumentos opcionais

Argumento ausente

Os seguintes erros gerais são emitidos quando o compilador não pode corresponder argumentos a todos os parâmetros de membro:

  • CS0839: argumento ausente.
  • CS7036: Não há nenhum argumento fornecido que corresponda ao parâmetro necessário

Esses erros são gerais: o compilador não pode corresponder aos argumentos fornecidos em uma chamada de método aos parâmetros necessários do método. Verifique as seguintes causas:

  • Verifique se você incluiu todos os argumentos necessários.
  • Verifique se os argumentos estão na ordem correta.
  • Verifique se todos os argumentos são do tipo correto.
  • Verifique se as regras de resolução de sobrecarga escolheram o método esperado.

Você também poderá ver CS7036 se tiver escrito funções locais sobrecarregadas. As funções locais não podem ser sobrecarregadas. O compilador reconhece apenas a primeira função local com esse nome. Verifique se você pretende chamar uma função local diferente.

Esses erros geralmente aparecem com outros diagnósticos que podem ajudar a diagnosticar a causa correta.

Argumentos para atributos

O compilador emite esses erros quando um argumento para um construtor de atributo está incorreto:

  • CS0182: Um argumento de atributo deve ser uma expressão constante, expressão typeof ou expressão de criação de matriz de um tipo de parâmetro de atributo
  • CS0591: Valor inválido para argumento de atributo
  • CS0599: valor inválido para o argumento de atributo nomeado 'argument'
  • CS0617: não é um argumento de atributo nomeado válido. Os argumentos de atributo nomeados devem ser campos que não são somente leitura, estáticos ou constante ou propriedades de leitura-gravação que são públicas e não estáticas.
  • CS0633: O argumento para o atributo deve ser um identificador válido
  • CS0643: argumento de atributo nomeado duplicado
  • CS0655: não é um argumento de atributo nomeado válido porque não é um tipo de parâmetro de atributo válido

Se você usar o System.AttributeUsageAttribute em sua definição de atributo, verifique se os valores permitidos não são mutuamente exclusivos. Verifique se o tipo e a ordem dos argumentos para o atributo estão corretos. Verifique se o texto dos argumentos de cadeia de caracteres é válido. Para muitos atributos, o argumento deve ser um identificador C# válido. Os argumentos para construtores de atributo devem ser constantes de tempo de compilação. Portanto, eles são limitados a tipos que dão suporte a constantes literais. Além disso, os seguintes tipos que permitem constantes literais não são permitidos como parâmetros de atributo:

Não é possível especificar argumentos nomeados repetidos com o mesmo nome de parâmetro. Você só pode definir propriedades acessíveis ao inicializar um atributo. Você não pode definir propriedades privadas.

Parâmetros e argumentos nomeados e opcionais

O compilador emite os seguintes erros para uso incorreto de argumentos nomeados e opcionais:

  • CS1016: argumento de atributo nomeado esperado
  • CS1739: a melhor sobrecarga para não ter um parâmetro nomeado
  • CS1740: argumento nomeado não pode ser especificado várias vezes
  • CS1742: Um acesso de matriz pode não ter um especificador de argumento nomeado
  • CS1744: argumento nomeado especifica um parâmetro para o qual um argumento posicional já foi fornecido
  • CS1746: O delegado não tem um parâmetro chamado 'name'
  • CS7067: o parâmetro do construtor de atributo é opcional, mas nenhum valor de parâmetro padrão foi especificado.
  • CS8324: Especificações de argumento nomeado devem aparecer depois que todos os argumentos fixos tiverem sido especificados em uma invocação dinâmica.
  • CS8905: um ponteiro de função não pode ser chamado com argumentos nomeados.

Verifique as seguintes causas destes erros:

  • O nome do parâmetro do argumento nomeado está incorreto.
  • A sobrecarga escolhida não tem um parâmetro que corresponda ao argumento nomeado.
  • Um nome de parâmetro é repetido em mais de um argumento.
  • Um argumento posicional (sem nome) aparece após argumentos nomeados.
  • Argumentos nomeados não são permitidos para parâmetros de índice de matriz.

Manipulador de cadeia de caracteres interpolada

O compilador emite os seguintes erros quando você especificou um manipulador de cadeia de caracteres interpolado incorretamente.

  • CS8943: nulo não é um nome de parâmetro válido. Para obter acesso ao receptor de um método de instância, use a cadeia de caracteres vazia como o nome do parâmetro.
  • CS8944: não é um método de instância, o receptor não pode ser um argumento de manipulador de cadeia de caracteres interpolado.
  • CS8945: Não é um nome de parâmetro válido.
  • CS8948: InterpolatedStringHandlerArgumentAttribute argumentos não podem se referir ao parâmetro no qual o atributo é usado.
  • CS8949: O InterpolatedStringHandlerArgumentAttribute aplicado ao parâmetro é malformado e não pode ser interpretado. Construa uma instância manualmente.
  • CS8950: o parâmetro é um argumento para a conversão de manipulador de cadeia de caracteres interpolada no parâmetro, mas o argumento correspondente é especificado após a expressão de cadeia de caracteres interpolada.
  • CS8951: o parâmetro não é fornecido explicitamente, mas é usado como um argumento para a conversão de manipulador de cadeia de caracteres interpolada no parâmetro.

Um manipulador de cadeia de caracteres interpolado é um constructo baseado em padrão. É importante corrigir o padrão. Consulte a especificação de recurso ou siga o tutorial sobre como criar um manipulador de cadeia de caracteres interpolado.

Informações de depuração de chamador

O compilador emite o seguinte erro em um uso incorreto do System.Runtime.CompilerServices.CallerArgumentExpressionAttribute:

  • CS8964: O CallerArgumentExpressionAttribute só pode ser aplicado a parâmetros com valores padrão

Além disso, o compilador emite os seguintes avisos sobre um uso incorreto do CallerArgumentExpressionAttribute:

  • CS8965: A CallerArgumentExpressionAttribute aplicada ao parâmetro não terá efeito porque é auto-referencial.
  • CS8966: O CallerArgumentExpressionAttribute não terá efeito porque se aplica a um membro usado em contextos que não permitem argumentos opcionais

Qualquer parâmetro anotado com o atributo CallerArgumentExpression deve ter um valor padrão.