Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo aborda os seguintes avisos do compilador:
- CS0022: número errado de índices dentro de [], o esperado é "número"
-
CS0178: especificador de classificação inválido: o esperado é "
," ou "]" - CS0248: não é possível criar uma matriz com um tamanho negativo
-
CS0270: o tamanho da matriz não pode ser especificado em uma declaração de variável (tente inicializar com uma expressão "
new") - CS0611: os elementos da matriz não podem ser do tipo
- CS0623: inicializadores de matriz só podem ser usados em uma variável ou inicializador de campo. Em vez disso, tente usar uma nova expressão.
- CS0650:declarador de matriz inválido: para declarar uma matriz gerenciada, o especificador de classificação precede o identificador da variável. Para declarar um campo de buffer de tamanho fixo, use a palavra-chave fixed antes do tipo de campo.
- CS0719: os elementos de matriz não podem ser do tipo estático
- CS0747: declarador de membro do inicializador inválido.
- CS0820: não é possível atribuir o inicializador de matriz a um local de tipo implícito
- CS0826: nenhum melhor tipo encontrado para a matriz de tipo implícito.
- CS0846: um inicializador de matriz aninhada é esperado
- CS1063: O melhor método Add sobrecarregado para o elemento inicializador de coleção está obsoleto.
-
CS1552: o especificador de tipo de matriz,
[], deve aparecer antes do nome do parâmetro - CS1586: a criação da matriz deve ter o tamanho da matriz ou o inicializador da matriz
- CS1920: o inicializador de elementos não pode estar vazio.
-
CS1921: a melhor correspondência de método sobrecarregado tem assinatura incorreta para o elemento inicializador. O inicializável
Adddeve ser um método de instância acessível. - CS1925: não é possível inicializar o objeto do tipo "type" com um inicializador de coleção.
- CS1950: O melhor método Add sobrecarregado do inicializador de coleção tem alguns argumentos inválidos.
-
CS1954: não é possível usar o melhor método sobrecarregado para o elemento inicializador de coleção. Métodos de inicializador de coleção "
Add" não podem ter os parâmetrosrefouout. - CS9174: não é possível inicializar o tipo com um literal de coleção porque o tipo não é construível.
- CS9176: não há nenhum tipo de destino para o literal da coleção.
- CS9185: o tipo de construtor CollectionBuilderAttribute deve ser uma classe ou struct não genéricos.
- CS9186: o nome do método CollectionBuilderAttribute é inválido.
-
CS9187: não foi possível encontrar um método acessível com a assinatura esperada: um método estático com um único parâmetro de tipo
ReadOnlySpan<T>; e o tipo de retorno correto - CS9188: o tipo tem um CollectionBuilderAttribute, mas nenhum tipo de elemento.
- CS9203: uma expressão de coleção desse tipo não pode ser usada nesse contexto porque pode ser exposta fora do escopo atual.
- CS9210: esta versão de System.Collections.Immutable.ImmutableArray<T>não pode ser usada com expressões de coleção.
-
CS9212: O operador de distribuição '
..' não pode operar em variáveis do tipo 'type' porque 'type' não contém uma instância pública ou uma definição de extensão para 'member'. - CS9213: o destino da expressão de coleção 'type' não tem nenhum tipo de elemento.
- CS9214: O tipo de expressão de coleção deve ter um construtor aplicável que possa ser chamado sem argumentos.
- CS9215: O tipo de expressão de coleção 'type' deve ter uma instância ou método de extensão 'Add' que pode ser chamado com um único argumento.
- CS9222: o inicializador de coleção resulta em uma cadeia infinita de instanciações da coleção 'type'.
- CS9332: Não é possível usar o operador de spread '..' na expressão de filtro de uma cláusula catch.
- CS9354: o elemento 'with(...)' deve ser o primeiro elemento
- CS9355: elementos 'with(...)' não são suportados para o tipo 'type'
- CS9356: argumentos de elemento 'with(...)' não podem ser dinâmicos
- CS9357: o elemento 'with(...)' para uma interface somente leitura deve estar vazio se presente
- CS9358: O tipo de elemento desta coleção pode não ser um struct ref ou um parâmetro de tipo que permite structs ref
- CS9359: Nenhuma sobrecarga para o método 'method' usa argumentos de elemento 'number' 'with(...)'
Além disso, os seguintes avisos são abordados neste artigo:
- CS1062: O melhor método Add sobrecarregado para o elemento inicializador de coleção está obsoleto.
- CS1064: O melhor método Add sobrecarregado para o elemento inicializador de coleção está obsoleto.
- CS3007: o método "method" sobrecarregado diferente apenas por tipos de matriz sem nome não é compatível com CLS
- CS3016: matrizes como argumentos de atributo não são compatíveis com CLS
- CS0251: indexar uma matriz com um índice negativo (índices de matriz sempre começam em zero)
- CS9208:a expressão de coleção pode incorrer em alocações de heap inesperadas. Considere criar explicitamente uma matriz e converter para o tipo final para tornar a alocação explícita.
-
CS9209: a expressão de coleção pode incorrer em alocações de heap inesperadas devido ao uso de spreads "
..". Considere criar explicitamente uma matriz e converter para o tipo final para tornar a alocação explícita. - CS9332: Não é possível usar o operador de spread '..' na expressão de filtro de uma cláusula catch.
Acesso inválido ao elemento de matriz
- CS0022: número errado de índices dentro de [], o esperado é "número"
- CS0251: indexar uma matriz com um índice negativo (índices de matriz sempre começam em zero)
Para acessar os elementos da matriz corretamente, siga estas regras de indexação. Saiba mais em Matrizes.
- Especifique o mesmo número de índices que as dimensões declaradas (CS0022). Uma matriz unidimensional precisa de um índice; uma matriz tridimensional precisa de três índices.
- Use apenas inteiros não negativos para índices de matriz (CS0251). Os índices de matriz sempre começam em zero.
Inicializador de coleção inválido
- CS0747: declarador de membro do inicializador inválido.
- CS1920: o inicializador de elementos não pode estar vazio.
-
CS1921: a melhor correspondência de método sobrecarregado tem assinatura incorreta para o elemento inicializador. O inicializável
Adddeve ser um método de instância acessível. - CS1922: não é possível inicializar o tipo 'type' com um inicializador de coleção porque 'type' não implementa 'System.Collections.IEnumerable'.
- CS1925: não é possível inicializar o objeto do tipo "type" com um inicializador de coleção.
- CS1927: Aviso: ignorando /win32manifest para o módulo porque ele se aplica apenas a assemblies
- CS1950: O melhor método Add sobrecarregado do inicializador de coleção tem alguns argumentos inválidos.
-
CS1954: não é possível usar o melhor método sobrecarregado para o elemento inicializador de coleção. Métodos de inicializador de coleção "
Add" não podem ter os parâmetrosrefouout. - CS9174: não é possível inicializar o tipo com um literal de coleção porque o tipo não é construível.
- CS9176: não há nenhum tipo de destino para o literal da coleção.
- CS9203: uma expressão de coleção desse tipo não pode ser usada nesse contexto porque pode ser exposta fora do escopo atual.
- CS9210: essa versão System.Collections.Immutable.ImmutableArray<T> não pode ser usada com expressões de coleção.
-
CS9212: O operador de distribuição '
..' não pode operar em variáveis do tipo 'type' porque 'type' não contém uma instância pública ou uma definição de extensão para 'member'. - CS9213: O destino da expressão de coleção 'type' não possui tipo de elemento.
- CS9214: O tipo de expressão de coleção deve ter um construtor aplicável que possa ser chamado sem argumentos.
- CS9215: O tipo de expressão de coleção 'type' deve ter uma instância ou método de extensão 'Add' que pode ser chamado com um único argumento.
- CS9222: o inicializador de coleção resulta em uma cadeia infinita de instanciações da coleção 'type'.
- CS9332: Não é possível usar o operador de spread '..' na expressão de filtro de uma cláusula catch.
- CS9354: o elemento 'with(...)' deve ser o primeiro elemento
- CS9355: elementos 'with(...)' não têm suporte para o tipo 'type'
- CS9356: argumentos de elemento 'with(...)' não podem ser dinâmicos
- CS9357: o elemento 'with(...)' para uma interface somente leitura deve estar vazio caso esteja presente
- CS9358: O tipo de elemento desta coleção pode não ser um struct ref ou um parâmetro de tipo que permite structs ref
- CS9359: Nenhuma sobrecarga para o método 'method' usa argumentos de elemento 'number' 'with(...)'
O compilador também pode gerar os seguintes avisos:
- CS1062: O melhor método Add sobrecarregado para o elemento inicializador de coleção está obsoleto.
- CS1063: O melhor método Add sobrecarregado para o elemento inicializador de coleção está obsoleto.
- CS1064: O melhor método Add sobrecarregado para o elemento inicializador de coleção está obsoleto.
- CS9208:a expressão de coleção pode incorrer em alocações de heap inesperadas. Considere criar explicitamente uma matriz e converter para o tipo final para tornar a alocação explícita.
-
CS9209: a expressão de coleção pode incorrer em alocações de heap inesperadas devido ao uso de spreads "
..". Considere criar explicitamente uma matriz e converter para o tipo final para tornar a alocação explícita.
Para criar inicializadores de coleção válidos, siga estas regras. Para obter mais informações, consulte Expressões de coleção.
- Não misture a inicialização de propriedade com a adição de elemento no mesmo inicializador (CS0747).
- Inclua pelo menos um elemento em inicializadores de coleção com chaves (CS1920).
- Verifique se o tipo de coleção implementa
IEnumerable(CS1922). - Use inicializadores de coleção somente com tipos de coleção (CS1925).
- Verifique se o
Addmétodo está acessível, usa um parâmetro que corresponde ao tipo de elemento e não usarefnemoutmodificadores (CS1921, CS1954). - Resolver sobrecargas de método ambíguas
Add(CS1950). - Forneça um tipo de destino explícito para expressões de coleção quando o compilador não puder inferi-lo (CS9176, CS9213).
- Verifique se o tipo de coleção é construível com um construtor sem parâmetros (CS9174, CS9214).
- Não use
ref structtipos em expressões de coleção que possam violar a segurança de ref (CS9203). - Atualize para uma versão de runtime compatível para
ImmutableArrayexpressões de coleção (CS9210). - Implemente padrões de enumeração (como
GetEnumerator) para o suporte ao operador de spread (CS9212). - Evite dependências circulares na inicialização da coleção (CS9222).
- Não use o operador de spread em expressões de filtro de cláusula catch (CS9332).
- Coloque o
with(...)elemento em primeiro lugar em expressões de coleção (CS9354). - Use elementos
with(...)apenas com tipos que dão suporte a argumentos de expressão de coleção (CS9355). - Não use argumentos dinâmicos em
with(...)elementos (CS9356). - Use vazio
with()para tipos de interface somente leitura (CS9357). - Não use tipos ref struct como tipos de elemento em coleções que não os suportam (CS9358).
- Iguale o número de
with(...)argumentos às sobrecargas disponíveis do construtor (CS9359).
Classificação de matriz inválida
-
CS0178: especificador de classificação inválido: o esperado é "
," ou "]" - CS0650:declarador de matriz inválido: para declarar uma matriz gerenciada, o especificador de classificação precede o identificador da variável. Para declarar um campo de buffer de tamanho fixo, use a palavra-chave fixed antes do tipo de campo.
-
CS1552: o especificador de tipo de matriz,
[], deve aparecer antes do nome do parâmetro
Para declarar matrizes corretamente, siga a ordem de sintaxe adequada. Para obter mais informações, consulte Matrizes e a seção Especificação da Linguagem C# em inicializadores de matriz.
Uma declaração de matriz consiste nesses tokens na ordem:
- O tipo de elementos de matriz (por exemplo,
int,stringouSomeClassType). - Os colchetes da matriz, opcionalmente incluindo vírgulas para separar várias dimensões.
- O nome da variável.
Ao especificar dimensões de matriz, você pode usar:
- Vários elementos em chaves (
{e}) - Colchetes vazios
- Uma ou mais vírgulas entre parênteses
Os exemplos a seguir mostram declarações de matriz válidas:
int[] anArrayOfIntegers;
string[,,] threeDimensionalStringArray;
Comprimento de matriz inválido
- CS0248: não é possível criar uma matriz com um tamanho negativo
- CS0270: O tamanho da matriz não pode ser especificado em uma declaração de variável (tente inicializar com uma expressão 'new')
- CS1586: a criação da matriz deve ter o tamanho da matriz ou do inicializador da matriz
Para criar matrizes com comprimentos válidos, especifique o tamanho durante a inicialização, não a declaração. Saiba mais em Matrizes.
- Especifique o comprimento da matriz como parte da inicialização, não da declaração (CS0270).
- Use apenas inteiros positivos para dimensões de matriz (CS0248).
- Forneça um tamanho em uma expressão
newou um inicializador de matriz (CS1586).
O exemplo a seguir mostra ambos os mecanismos:
int[] fiveIntegers = new int[5];
string[] weekDays = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
Tipo de elemento inválido
- CS0611: os elementos da matriz não podem ser do tipo "type"
- CS0719: os elementos da matriz não podem ser de tipo estático
- CS0820: não é possível atribuir o inicializador de matriz a um local de tipo implícito
- CS0826: Nenhum tipo adequado encontrado para array de tipo implícito
Para usar matrizes com tipos de elemento corretos, siga essas restrições de tipo. Para obter mais informações, consulte variáveis locais tipadas implicitamente e melhor tipo comum.
- Não use tipos restritos como System.TypedReference e System.ArgIterator como tipos de elemento de matriz (CS0611).
- Não use
staticclasses como tipos de elemento de matriz porque as instâncias não podem ser criadas (CS0719). - Inicialize matrizes tipadas implicitamente com uma
newexpressão (CS0820). - Verifique se todos os elementos em um inicializador de matriz implicitamente tipado têm um tipo comum melhor (CS0826).
Os exemplos a seguir mostram como declarar matrizes tipadas implicitamente.
var implicitType = new[] { 1, 2, 3 };
char c = 'c';
short s1 = 0;
short s2 = -0;
short s3 = 1;
short s4 = -1;
// common type is "int"
var commonType = new[] { s1, s2, s3, s4, c, 1 };
Para garantir um melhor tipo comum, use qualquer uma dessas técnicas:
- Forneça um tipo explícito à matriz.
- Forneça o mesmo tipo a todos os elementos da matriz.
- Forneça conversões explícitas aos elementos que podem estar causando o problema.
Inicializador de matriz inválido
- CS0623: inicializadores de matriz só podem ser usados em uma variável ou inicializador de campo. Em vez disso, tente usar uma nova expressão.
- CS0846: um inicializador de matriz aninhada é esperado
- CS1925: não é possível inicializar o objeto do tipo "type" com um inicializador de coleção.
Esses erros indicam uma sintaxe inválida do inicializador de matriz. Saiba mais em Matrizes.
Para criar inicializadores de matriz válidos:
- Use inicializadores de matriz somente em declarações de variável ou de campo (CS0623). Use uma
newexpressão em outros contextos. - Balancear chavetas (
{e}) ao redor de elementos ou arrays filhos (CS0846). - Verifique se a expressão de inicialização corresponde ao número de matrizes em uma inicialização de matriz irregular.
- Use inicializadores de coleção somente com tipos de coleção, não com matrizes ou outros tipos (CS1925).
Construtor de coleções inválido
- CS9175: Uma árvore de expressão pode não conter uma expressão de coleção.
- CS9177: O tipo de retorno do método do construtor 'CollectionBuilderAttribute' deve corresponder ao tipo de coleção usado em 'betterness'.
- CS9178: Não há nenhum tipo de destino para o tipo natural 'type'.
- CS9179: O tipo de expressão de coleção deve ter um construtor aplicável que possa ser chamado sem argumentos.
- CS9180: O método do construtor 'CollectionBuilderAttribute' deve ser um método estático.
- CS9181: o tipo de parâmetro do método do construtor 'CollectionBuilderAttribute' deve corresponder ao parâmetro 'ReadOnlySpan<{0}>'
- CS9182: 'CollectionBuilderAttribute' inválido. Nenhum método correspondente '{0}' foi encontrado no tipo de construtor '{1}'.
- CS9183: O tipo de retorno do método 'CollectionBuilderAttribute' deve ser um tipo não abstrato e não-interface utilizável como um "tipo"
- CS9185: Um tipo estático não pode ser usado como um argumento de tipo.
-
CS9186: o nome do método
CollectionBuilderAttributeé inválido. - CS9187: Não foi possível encontrar um método 'Create' acessível com a assinatura esperada: um método estático com um único parâmetro do tipo 'ReadOnlySpan<{0}>' e o tipo de retorno '{1}'.
- CS9188: 'scoped' não pode ser usado como modificador em um parâmetro de tipo de expressão de coleção.
- CS9190: O método 'CollectionBuilderAttribute' 'builderMethod' é inaplicável porque é genérico.
- CS9192: conversões de matriz embutida não podem ser usadas com expressões de coleção.
- CS9193: O argumento 'argument' pode não ser passado com a palavra-chave 'ref'.
- CS9194: O argumento 'argument' não pode ser passado com a palavra-chave 'out'
- CS9195: O argumento 'argument' pode não ser passado com a palavra-chave 'in'
- CS9196: O recurso 'expressão de coleção' não está disponível na "versão" do C#. Use a versão de idioma 'requiredVersion' ou superior.
- CS9197: O recurso 'matrizes embutidas' não está disponível na "versão" do C#. Use a versão de idioma 'requiredVersion' ou superior.
- CS9198: O recurso 'ref' e 'unsafe' em métodos 'async' e 'iterator' não está disponível na versão do C# 'version'. Por favor, use a versão da linguagem 'requiredVersion' ou superior.
- CS9199: O recurso 'expressão de coleção' não está disponível na versão 'version' do C#. Use a versão de idioma 'requiredVersion' ou superior.
- CS9202: O recurso 'ref readonly parameters' não está disponível na 'versão' do C#. Use a versão de idioma 'requiredVersion' ou superior.
- CS9208: o operador 'nameof' não pode ser usado em um acesso de matriz embutida.
- CS9209: Uma propriedade "property" de retorno de ref não pode ser usada como um argumento de valor.
- CS9211: A expressão deve ser do tipo 'type' porque está sendo atribuída por referência
- CS9212: Não é possível usar a expressão de coleção como o valor em uma instrução fixa
- CS9217: Um local 'ref' não pode ser preservado no limite 'await' ou 'yield'.
- CS9218: 'paramName' é um struct ref e não pode ser o tipo de um parâmetro
- CS9221: O tipo 'type' não pode ser um ref struct ou um parâmetro de tipo que permita ref structs, para que possa ser usado como parâmetro 'parâmetro' no tipo ou método genérico 'member'
- CS9223: um struct que contém campos 'ref' não pode ser usado em uma expressão de coleção.
- CS9228: A declaração não variável de um struct ref não é permitida
- CS9232: Declarações de método parciais têm diferenças de assinatura.
- CS9233: O modificador 'file' só pode ser usado em tipos definidos em nível superior em uma unidade de compilação
Para criar expressões de coleção com atributos do construtor de coleções corretamente, siga esses requisitos. Para obter mais informações, consulte Expressões de coleção.
- Verifique se o tipo de destino tem um tipo de iteração que suporta
foreachcom (CS9188). - Não use tipos genéricos como tipos de construtor de coleção (CS9185).
- Verifique se o nome do método especificado é
CollectionBuilderAttributeválido (CS9186). - Aplique
CollectionBuilderAttributesomente com métodos estáticos que correspondam à assinatura necessária: retorne o tipo de coleção e use umReadOnlySpan<T>parâmetro emTque corresponda ao tipo de elemento (CS9180, CS9181, CS9182, CS9183, CS9187, CS9190). - Verifique se o tipo de retorno corresponde e não é abstrato ou uma interface (CS9177, CS9183).
- Não use estruturas ref ou tipos com campos ref em expressões de coleção (CS9218, CS9221, CS9223, CS9228).
- Evite usar expressões de coleção em árvores de expressão (CS9175).
- Use a versão de linguagem correta para expressões de coleção e recursos relacionados (CS9196, CS9197, CS9198, CS9199, CS9202).
Avisos de especificação de idioma comum
- CS3007: o método "method" sobrecarregado diferente apenas por tipos de matriz sem nome não é compatível com CLS
- CS3016: matrizes como argumentos de atributo não são compatíveis com CLS
Para escrever código em conformidade com CLS com matrizes, siga estas diretrizes. Para obter mais informações, consulte Independência da linguagem.
- Não crie métodos sobrecarregados que diferem apenas em tipos de elemento de matriz (CS3007).
- Não use matrizes como argumentos de atributo (CS3016).
O CS3007 ocorre se você tiver um método sobrecarregado que usa uma matriz irregular e a única diferença entre as assinaturas de método é o tipo de elemento da matriz. Para evitar esse erro, considere usar uma matriz retangular em vez de uma matriz irregular ou, se a conformidade CLS não for necessária, remova o atributo CLSCompliantAttribute. Para obter mais informações sobre a conformidade com CLS, confira Independência de linguagem e componentes independentes da linguagem.
O CS3016 indica que não é compatível com a Common Language Specification (CLS) para passar uma matriz para um atributo. Para obter mais informações sobre conformidade com CLS, consulte Independência de Linguagem e Componentes Independentes da Linguagem.