Compartilhar via


Regras de uso

As regras de uso dão suporte ao uso adequado do .NET.

Nesta seção

Regra Descrição
CA1801: Examinar parâmetros não utilizados Uma assinatura de método inclui um parâmetro que não é usado no corpo do método.
CA1816: Chamar GC.SuppressFinalize corretamente Um método que é uma implementação de Dispose não chama GC.SuppressFinalize, ou um método que não é uma implementação de Dispose chama GC.SuppressFinalize, ou um método chama GC.SuppressFinalize e passa algo diferente de this (Me em Visual Basic).
CA2200: Relançar para preservar detalhes da pilha Uma exceção é lançada novamente e a exceção é especificada explicitamente na instrução throw. Se uma exceção for lançada novamente pela especificação da exceção na instrução throw, a lista de chamadas de método entre o método original que lançou a exceção e o método atual será perdida.
CA2201: Não acionar tipos de exceção reservados Isso torna o erro original difícil de detectar e depurar.
CA2207: Inicializar campos estáticos de tipo de valor em linha Um tipo de valor declara um construtor estático explícito. Para corrigir uma violação dessa regra, inicialize todos os dados estáticos quando declarados e remova o construtor estático.
CA2208: Criar instância de exceções de argumento corretamente For feita uma chamada para o construtor padrão (sem parâmetros) de um tipo de exceção que seja ou derive de ArgumentException, ou um argumento de cadeia de caracteres incorreto é passado para um construtor com parâmetros de um tipo de exceção que seja ou derive de ArgumentException.
CA2211: Campos não constantes não devem ser visíveis Os campos estáticos que não são constantes nem somente leitura não são thread-safe. O acesso a esse campo deve ser controlado cuidadosamente e exige técnicas de programação avançadas para sincronizar o acesso ao objeto da classe.
CA2213: Campos descartáveis devem ser descartados Um tipo que implementa System.IDisposable declara campos que são de tipos que também implementam IDisposable. O método Dispose do campo não é chamado pelo método Dispose do tipo declarante.
CA2214: Não chamar métodos substituíveis em construtores Quando um construtor chama um método virtual, é possível que o construtor da instância que invoca o método não tenha sido executado.
CA2215: Métodos Dispose devem chamar o descarte da classe base Se um tipo for herdado de um tipo descartável, ele deverá chamar o método Dispose do tipo base em seu próprio método Dispose.
CA2216: Tipos descartáveis devem declarar o finalizador Um tipo que implementa System.IDisposable e tem campos que sugerem o uso de recursos não gerenciados não implementa um finalizador conforme descrito por Object.Finalize.
CA2217: Não marcar enumerações com FlagsAttribute Uma enumeração externamente visível é marcada com FlagsAttribute e tem um ou mais valores que não são potências de dois ou uma combinação dos outros valores definidos na enumeração.
CA2218: Substituir GetHashCode ao substituir Equals Um tipo público substitui System.Object.Equals, mas não substitui System.Object.GetHashCode.
CA2219: Não acionar exceções em cláusulas de exceção Quando uma exceção é acionada em uma cláusula finally ou fault, a nova exceção oculta a exceção ativa. Quando uma exceção é acionada em uma cláusula de filtro, runtime a captura silenciosamente. Isso torna o erro original difícil de detectar e depurar.
CA2224: Substituir equals ao sobrecarregar operador equals Um tipo público implementa o operador de igualdade, mas não substitui System.Object.Equals.
CA2225: Sobrecargas de operador têm alternativas nomeadas Uma sobrecarga de operador foi detectada, e o método alternativo nomeado esperado não foi encontrado. O membro alternativo nomeado fornece acesso à mesma funcionalidade que o operador, e é fornecido para desenvolvedores que programem em linguagens que não dão suporte a operadores sobrecarregados.
CA2226: Operadores devem ter sobrecargas simétricas Um tipo implementa o operador de igualdade ou de desigualdade e não implementa o operador oposto.
CA2227: Propriedades de coleção devem ser somente leitura Uma propriedade collection gravável permite que um usuário substitua a coleção por uma coleção diferente. Uma propriedade somente leitura evita que a coleção seja substituída, mas ainda permite que membros individuais sejam definidos.
CA2229: Implementar construtores de serialização Para corrigir uma violação dessa regra, implemente o construtor de serialização. Para uma classe lacrada, torne o construtor particular; do contrário, deixe-o protegido.
CA2231: Sobrecarregar operador equals ao substituir ValueType.Equals Um tipo de valor substitui Object.Equals, mas não implementa o operador de igualdade.
CA2234: Passar objetos System.Uri em vez de cadeias de caracteres Foi feita uma chamada para um método com um parâmetro de cadeia de caracteres cujo nome contém "uri", "URI", "urn", "URN", "url" ou "URL". O tipo declarante do método contém uma sobrecarga do método correspondente que possui um parâmetro System.Uri.
CA2235: Marcar todos os campos não serializáveis Um campo de instância de um tipo que não seja serializável é declarado em um tipo que é serializável.
CA2237: Marcar tipos ISerializable com SerializableAttribute Para serem reconhecidos pelo Common Language Runtime como serializáveis, os tipos devem ser marcados com o atributo SerializableAttribute, se o tipo usar uma rotina de serialização personalizada por meio da implementação da interface ISerializable.
CA2241: Fornecer argumentos corretos para métodos de formatação O argumento de formato passado para String.Format não contém um item de formato que corresponda a cada argumento do objeto ou vice-versa.
CA2242: Testar para NaN corretamente Essa expressão testa um valor em relação a Single.Nan ou Double.Nan. Use Single.IsNan(Single) ou Double.IsNan(Double) para testar o valor.
CA2243: Literais de cadeias de caracteres de atributo devem ser analisados corretamente O parâmetro literal da cadeia de caracteres de um atributo não é analisado corretamente para uma URL, um GUID ou uma versão.
CA2244: Não duplicar inicializações de elementos indexados Um inicializador de objeto tem mais de um inicializador de elemento indexado com o mesmo índice de constante. Todos, exceto o último inicializador, são redundantes.
CA2245: Não atribuir uma propriedade a si mesma Uma propriedade foi acidentalmente atribuída a si mesma.
CA2246: Não designar um símbolo e o membro dele na mesma instrução Não é recomendado atribuir um símbolo e seu membro, ou seja, um campo ou uma propriedade, na mesma instrução. Não está claro se o acesso do membro visava usar o valor antigo do símbolo antes da atribuição ou o novo valor da atribuição nesta instrução.
CA2247: O argumento passado para o construtor TaskCompletionSource deve ser a enumeração TaskCreationOptions em vez da enumeração TaskContinuationOptions TaskCompletionSource tem construtores que usam TaskCreationOptions para controlar a tarefa subjacente e construtores que usam o estado do objeto armazenado na tarefa. A transmissão acidental de TaskContinuationOptions em vez de TaskCreationOptions resultará na chamada tratando as opções como estado.
CA2248: Fornecer o argumento de enumeração correto para Enum.HasFlag O tipo enumerado transmitido como argumento para a chamada do método HasFlag é diferente do tipo enumerado da chamada.
CA2249: Considerar o uso de String.Contains em vez de String.IndexOf As chamadas para string.IndexOf, em que o resultado é usado para verificar a presença ou ausência de uma substring, podem ser substituídas por string.Contains.
CA2250: usar ThrowIfCancellationRequested ThrowIfCancellationRequested verifica automaticamente se o token foi cancelado e emite OperationCanceledException se isso aconteceu.
CA2251: usar String.Equals em vez de String.Compare É mais claro e provavelmente mais rápido usar String.Equals em vez de comparar o resultado de String.Compare com zero.
CA2252: optar pela versão prévia dos recursos Opte pela versão prévia dos recursos antes de usar APIs de versão prévia.
CA2253: espaços reservados nomeados não devem ser valores numéricos Espaços reservados nomeados no modelo de mensagem de registro em log não devem ser compostos somente por caracteres numéricos.
CA2254: o modelo deve ser uma expressão estática O modelo de mensagem de registro em log não deve variar entre as chamadas.
CA2255: o atributo ModuleInitializer não deve ser usado em bibliotecas Os inicializadores de módulo devem ser usados pelo código do aplicativo para garantir que os componentes do aplicativo sejam inicializados antes do início da execução do código do aplicativo.
CA2256: todos os membros declarados nas interfaces pai devem ter uma implementação em uma interface atribuída a DynamicInterfaceCastableImplementation Os tipos atribuídos com DynamicInterfaceCastableImplementationAttribute atuam como uma implementação de interface para um tipo que implementa o tipo IDynamicInterfaceCastable. Como resultado, deve ser fornecida uma implementação de todos os membros definidos nas interfaces herdadas, pois o tipo que implementa IDynamicInterfaceCastable não os fornecerá de outra forma.
CA2257: membros definidos em uma interface com 'DynamicInterfaceCastableImplementationAttribute' devem ser 'static' Como um tipo que implementa IDynamicInterfaceCastable pode não implementar uma interface dinâmica em metadados, as chamadas para um membro de interface de instância que não é uma implementação explícita definida nesse tipo provavelmente falharão no runtime. Marque novos membros da interface com static para evitar erros no runtime.
CA2258: não há suporte para o fornecimento de uma interface 'DynamicInterfaceCastableImplementation' no Visual Basic Para fornecer uma interface funcional atribuída a DynamicInterfaceCastableImplementationAttribute, é necessário o recurso Membros de Interface Padrão, que não tem suporte no Visual Basic.
CA2259: garantir que ThreadStatic seja usado apenas com campos estáticos ThreadStaticAttribute afeta apenas campos static (Shared no Visual Basic). Quando aplicado a campos de instância, o atributo não tem impacto sobre o comportamento.
CA2260: implementar interfaces matemáticas genéricas corretamente As interfaces matemáticas genéricas exigem que o próprio tipo derivado seja usado para o parâmetro de tipo recorrente.
CA2261: não use ConfigureAwaitOptions.SuppressThrowing com Task<TResult> A opção ConfigureAwaitOptions.SuppressThrowing não é compatível com o genérico Task<TResult>, pois isso pode levar ao retorno de um TResult inválido.
CA2262: MaxResponseHeadersLength definido corretamente Certifique-se de que o valor MaxResponseHeadersLength tenha sido fornecido corretamente. Esse valor é medido em quilobytes.
CA2264: Não passar um valor não anulável para 'ArgumentNullException.ThrowIfNull' 'ArgumentNullException.ThrowIfNull' é gerado quando o argumento passado é 'null'. Sabe-se que certas construções, como structs não anuláveis e expressões 'nameof()' e 'new', nunca são nulas, portanto, 'ArgumentNullException.ThrowIfNull' nunca será lançada.
CA2265: Não comparar Span<T> ou nulldefault Comparar um intervalo com null ou default pode não fazer o que você pretendia. default e o null literal são implicitamente convertidos em Span<T>.Empty.
CA2263: prefira sobrecarga genérica quando o tipo é conhecido Usar uma sobrecarga genérica é preferível a passar um System.Type argumento quando o tipo é conhecido, pois eles promovem um código mais limpo e mais seguro para tipos com verificações aprimoradas em tempo de compilação.