Erros e avisos relacionados ao modificador params
em parâmetros de métodos
Há alguns erros relacionados à instrução lock
e sincronização de thread:
- CS0225: O parâmetro params deve ser uma matriz unidimensional ou ter um tipo de coleção válido
- CS0231: O parâmetro params deve ser o último parâmetro em uma lista de parâmetros formal.
- CS0466: 'method1' não deve ter um parâmetro params, pois 'method2' não tem
- CS0674: Não use
System.ParamArrayAttribute
ouSystem.ParamArrayAttribute
/System.Runtime.CompilerServices.ParamCollectionAttribute
. Em vez disso, use a palavra-chaveparams
. - CS0758: As duas declarações de método parcial devem usar um parâmetro
params
ou nenhuma delas pode usar um parâmetroparams
- CS1104: Uma matriz de parâmetros não pode ser usada com o modificador
this
em um método de extensão. - CS1611: O parâmetro params não pode ser declarado como em
ref
ouout
- CS1670:
params
não é válido neste contexto - CS1751: Não é possível especificar um valor padrão para uma matriz de parâmetros.
- CS9218: Os argumentos de tipo para o método não podem ser inferidos a partir do uso porque um argumento com tipo dinâmico é usado e o método possui um parâmetro de coleção de parâmetros não matrizes. Tente especificar os argumentos de tipo explicitamente.
- CS9223: A criação de uma coleção de parâmetros resulta em uma cadeia infinita de invocação do construtor.
- CS9224: O método não pode ser menos visível do que o membro com a coleção de parâmetros.
- CS9225: O construtor deixa o membro necessário não inicializado.
- CS9227: O tipo não contém uma definição para um método de instância
Add
adequado. - CS9228: O tipo de coleção de parâmetros não matrizes deve ter um construtor aplicável que possa ser chamado sem argumentos.
Regras de declaração de métodos
Os erros a seguir indicam o uso de um modificador params
em um parâmetro quando o modificador params
não é permitido nesse contexto:
- CS0231: Um parâmetro params deve ser o último parâmetro em uma lista formal de parâmetros.
- CS1104: Uma matriz de parâmetros não pode ser usada com o modificador
this
em um método de extensão. - CS1611: O parâmetro params não pode ser declarado como em
ref
ouout
- CS1670:
params
não é válido neste contexto - CS1751: Não é possível especificar um valor padrão para uma matriz de parâmetros.
O compilador aplica as seguintes regras ao uso do modificador params
em um parâmetro de método:
- O modificador
params
é permitido somente no último parâmetro em uma lista formal de parâmetros. Isso inclui todos os parâmetros com um valor padrão. - Não é possível incluir um argumento padrão para o parâmetro quando o modificador
params
é usado. - O modificador
params
não pode ser aplicado ao parâmetro de referência. Um parâmetro de referência é aquele com o modificadorin
,ref readonly
,ref
ouout
. - O modificador
params
não pode ser combinado com o modificadorthis
em um método de extensão. - O modificador
params
não pode ser usado em um operador sobrecarregado.
Em versões anteriores ao C# 12, o modificador params
não pode ser usado no parâmetro de um método anônimo ou expressão lambda.
Regras do tipo de parâmetro e argumento
Os erros a seguir indicam que o tipo do parâmetro usado com params
é inválido:
- CS9218: Os argumentos de tipo para o método não podem ser inferidos a partir do uso porque um argumento com tipo dinâmico é usado e o método tem um parâmetro de coleção de parâmetros não matrizes. Tente especificar os argumentos de tipo explicitamente.
- CS0225: O parâmetro params deve ser uma matriz unidimensional ou ter um tipo de coleção válido
- CS9227: O tipo não contém uma definição para um método de instância
Add
adequado. - CS9228: O tipo de coleção de parâmetros não matrizes deve ter um construtor aplicável que possa ser chamado sem argumentos.
Em versões anteriores ao C# 13, o modificador params
é permitido apenas em matrizes unidimensionais. Nenhum outro tipo era válido.
A partir do C# 13, qualquer tipo de coleção válido pode ser usado. Entretanto, algumas restrições permanecem. O tipo de coleção deve seguir as mesmas regras que o destino de uma expressão de coleção.
Outros erros de params
Os erros a seguir indicam outros problemas com o uso do modificador params
:
- CS0466: 'method1' não deve ter um parâmetro params, pois 'method2' não tem
- CS0674: Não use
System.ParamArrayAttribute
ouSystem.Runtime.CompilerServices.ParamCollectionAttribute
. Em vez disso, use a palavra-chaveparams
. - CS0758: As duas declarações de método parcial devem usar um parâmetro
params
ou nenhuma delas pode usar um parâmetroparams
- CS9223: A criação de uma coleção de parâmetros resulta em uma cadeia infinita de invocação do construtor.
- CS9224: O método não pode ser menos visível do que o membro com a coleção de parâmetros.
- CS9225: O construtor deixa o membro necessário não inicializado.
Um método que implementa uma interface deve incluir o modificador params
se e somente se o membro da interface tiver o modificador params
. Da mesma forma, ambas as declarações de um método partial
devem incluir o modificador params
, ou nenhuma pode incluir o modificador params
.
Você deve usar o modificador params
. Não é possível aplicar os atributos equivalentes, seja System.ParamArrayAttribute ou System.Runtime.CompilerServices.ParamCollectionAttribute.
O compilador gera um dos três últimos erros da lista anterior quando o código gerado para criar o tipo de coleção é inválido:
- O compilador emite CS9223 quando o código emitido para criar a coleção também contém uma coleção de parâmetros do mesmo tipo. Normalmente, o método
Add
recebe uma coleçãoparams
do mesmo tipo. - O compilador emite CS9224 quando o método
Create
para o tipo de coleção é menos acessível do que o método que recebe o parâmetroparams
do tipo de coleção. - O compilador emite CS9225 quando o tipo de coleção tem um membro obrigatório e o construtor sem parâmetro não inicializa esse membro e tem o System.Diagnostics.CodeAnalysis.SetsRequiredMembersAttribute no construtor sem parâmetros.