Regras de utilização

As regras de uso suportam o uso adequado do .NET.

Nesta secção

Regra Descrição
CA1801: Rever parâmetros não utilizados Uma assinatura de método inclui um parâmetro que não é usado no corpo do método.
CA1816: Chame GC.SuppressFinalize corretamente Um método que implementa Dispose não chama GC.SuppressFinalize; ou um método que não implementa Dispose chama GC.SuppressFinalize; ou um método chama GC.SuppressFinalize e passa um valor diferente de this (Me em Visual Basic).
CA2200: Relançar para preservar os detalhes da pilha Uma exceção é lançada novamente e a exceção é explicitamente especificada na instrução throw. Se uma exceção for relançada especificando a exceção na instrução `throw`, perde-se a sequência de chamadas de métodos entre o método original que gerou a exceção e o método atual.
CA2201: Não gerar tipos de exceção reservados Isso torna o erro original difícil de detetar e depurar.
CA2207: Inicializar campos estáticos de tipo de valor embutidos 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 eles forem declarados e remova o construtor estático.
CA2208: Instanciar exceções de argumento corretamente Uma chamada é feita para o construtor padrão (sem parâmetros) de um tipo de exceção que é ou deriva de ArgumentException, ou um argumento de cadeia de caracteres incorreto é passado para um construtor parametrizado de um tipo de exceção que é ou deriva de ArgumentException.
CA2211: Campos não constantes não devem ser visíveis Os campos estáticos que não são constantes ou somente leitura não são thread-safe. O acesso a tal campo deve ser cuidadosamente controlado e requer técnicas avançadas de programação para sincronizar o acesso ao objeto de classe.
CA2213: Os campos descartáveis devem ser eliminados 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 que o declara.
CA2214: Não chamar métodos que podem ser substituídos em construtores Quando um construtor chama um método virtual, é possível que o construtor da instância que invoca esse método não tenha sido executado.
CA2215: Os métodos de descarte devem chamar a classe base dispose Se um tipo herda de um tipo descartável, ele deve chamar o Dispose método do tipo base de seu próprio Dispose método.
CA2216: Tipos elimináveis devem declarar finalizador Um tipo que implementa System.IDisposable e que tem campos que sugerem a utilização de recursos não geridos não implementa um finalizador, conforme descrito em Object.Finalize.
CA2217: Não marcar enumerações com o atributo Flags Uma enumeração visível externamente é 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 sobrescreve System.Object.Equals, mas não sobrescreve System.Object.GetHashCode.
CA2219: Não levante exceções em cláusulas de exceção Quando uma exceção é gerada em uma cláusula final ou de falha, a nova exceção oculta a exceção ativa. Quando uma exceção é lançada numa cláusula de filtro, o ambiente de execução captura silenciosamente a exceção. Isso torna o erro original difícil de detetar e depurar.
CA2224: Sobrescreva equals ao sobrecarregar o operador equals Um tipo público implementa o operador de igualdade, mas não substitui System.Object.Equals.
CA2225: As sobrecargas do operador nomearam suplentes Uma sobrecarga do operador foi detetada 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 programam em idiomas que não suportam operadores sobrecarregados.
CA2226: Os operadores devem ter sobrecargas simétricas Um tipo implementa o operador de igualdade ou desigualdade e não implementa o operador oposto.
CA2227: As propriedades de coleção devem ser só de leitura Uma propriedade de coleção gravável permite que um usuário substitua a coleção por uma coleção diferente. Uma propriedade só de leitura impede que a coleção seja substituída, mas ainda permite que os membros individuais possam ser definidos.
CA2229: Implementar construtores de serialização Para corrigir uma violação dessa regra, implemente o construtor de serialização. Para uma classe selada, declare o construtor como privado; caso contrário, declare-o como protegido.
CA2231: Sobrecarregue o operador de igualdade 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 Uma chamada é feita para um método que tem um parâmetro string cujo nome contém "uri", "URI", "urn", "URN", "url" ou "URL". O tipo declarante do método contém uma sobrecarga correspondente do método que tem 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 é serializável é declarado em um tipo que é serializável.
CA2237: Assinale os tipos ISerializable com o atributo SerializableAttribute Para serem reconhecidos pelo common language runtime como serializáveis, os tipos devem ser marcados com o atributo SerializableAttribute, mesmo que o tipo use uma rotina de serialização personalizada por meio da implementação da ISerializable interface.
CA2241: Fornecer argumentos corretos para métodos de formatação O argumento format passado para String.Format não contém um item de formato que corresponda a cada argumento de objeto, ou vice-versa.
CA2242: Teste corretamente NaN Esta expressão testa um valor contra Single.Nan ou Double.Nan. Use Single.IsNan(Single) ou Double.IsNan(Double) para testar o valor.
CA2243: Os literais de cadeia de caracteres de atributos devem ser analisados corretamente O parâmetro literal de cadeia de caracteres de um atributo não analisa 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 constante. Todos, exceto o último inicializador, são redundantes.
CA2245: Não atribua uma propriedade a si mesmo Uma propriedade foi acidentalmente atribuída a si própria.
CA2246: Não atribua um símbolo e o respetivo membro na mesma instrução Não é recomendável atribuir um símbolo e o respetivo membro, ou seja, um campo ou uma propriedade, na mesma declaração. Não está claro se o acesso do membro foi destinado a usar o valor antigo do símbolo antes da atribuição ou o novo valor da atribuição nesta declaração.
CA2247: Argumento passado para TaskCompletionSource construtor deve ser TaskCreationOptions enum em vez de TaskContinuationOptions enum TaskCompletionSource tem construtores que usam TaskCreationOptions que controlam a Task subjacente e construtores que usam o estado do objeto armazenado na tarefa. Passar acidentalmente um TaskContinuationOptions em vez de um TaskCreationOptions fará com que a chamada trate as opções como estado.
CA2248: Forneça o argumento 'enum' correto para 'Enum.HasFlag' O tipo enum passado como argumento na chamada do método HasFlag é diferente do tipo enum que faz a chamada.
CA2249: Considere usar String.Contains em vez de String.IndexOf As chamadas para string.IndexOf onde o resultado é usado para verificar a presença ou ausência de uma substring podem ser substituídas por string.Contains.
CA2250: Utilize ThrowIfCancellationRequested ThrowIfCancellationRequested verifica automaticamente se o token foi cancelado e lança um OperationCanceledException se foi.
CA2251: Utilize 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: Opte por visualizar recursos Ative as funcionalidades de pré-visualização antes de utilizar APIs em pré-visualização.
CA2253: Os marcadores de posição com nome não devem ser valores numéricos Os marcadores de posição nomeados no modelo de mensagem de registo não devem ser compostos apenas por carateres numéricos.
CA2254: O modelo deve ser uma expressão estática O modelo de mensagem de registro não deve variar entre chamadas.
CA2255: O ModuleInitializer atributo não deve ser usado em bibliotecas Os inicializadores de módulo destinam-se a ser usados pelo código do aplicativo para garantir que os componentes de um aplicativo sejam inicializados antes que o código do aplicativo comece a ser executado.
CA2256: Todos os membros declarados em interfaces base têm de ter uma implementação numa interface com o atributo DynamicInterfaceCastableImplementation Os tipos atribuídos a DynamicInterfaceCastableImplementationAttribute atuam como implementação de interface para um tipo que implementa o tipo IDynamicInterfaceCastable. Como resultado, ele deve fornecer uma implementação de todos os membros definidos nas interfaces herdadas, porque o tipo que implementa IDynamicInterfaceCastable não irá fornecê-los de outra forma.
CA2257: Membros definidos em uma interface com 'DynamicInterfaceCastableImplementationAttribute' devem ser 'estáticos' Como um tipo que implementa IDynamicInterfaceCastable pode não implementar uma interface dinâmica nos metadados, chamadas a um membro da interface de instância que não seja uma implementação explícita definida neste tipo provavelmente falham em tempo de execução. Marque novos membros static da interface para evitar erros em tempo de execução.
CA2258: Não há suporte para fornecer uma interface 'DynamicInterfaceCastableImplementation' no Visual Basic Fornecer uma interface funcional atribuída com DynamicInterfaceCastableImplementationAttribute requer a funcionalidade Membros de Interface Predefinidos, que não é suportada no Visual Basic.
CA2259: Certifique-se de que ThreadStatic só seja utilizado com campos estáticos ThreadStaticAttribute afeta apenas os campos static (Shared no Visual Basic). Quando aplicado a campos de instância, o atributo não tem impacto no comportamento.
CA2260: Implementar interfaces matemáticas genéricas corretamente As interfaces matemáticas genéricas requerem que o próprio tipo derivado seja utilizado como parâmetro de tipo autorrecorrente.
CA2261: Não utilizar ConfigureAwaitOptions.SuppressThrowing com Task<TResult> A opção ConfigureAwaitOptions.SuppressThrowing não é suportada pelo genérico Task<TResult>, uma vez que isso pode levar à devolução de um TResult inválido.
CA2262: Definir MaxResponseHeadersLength corretamente Verifique se o MaxResponseHeadersLength valor é fornecido corretamente. Este valor é medido em kilobytes.
CA2263: Prefira sobrecarga genérica quando o tipo é conhecido Usar uma sobrecarga genérica é preferível a passar um argumento System.Type quando o tipo é conhecido, porque promove um código mais limpo e com maior segurança de tipos, com melhores verificações em tempo de compilação.
CA2264: Não passe um valor não anulável para 'ArgumentNullException.ThrowIfNull' 'ArgumentNullException.ThrowIfNull' é lançado quando o argumento passado é 'null'. Certas construções, como structs não anuláveis, e as expressões 'nameof()' e 'new', são conhecidas por nunca serem nulas, pelo que 'ArgumentNullException.ThrowIfNull' nunca gerará uma exceção.
CA2265: Não comparar Span<T> com null ou default Comparar um span com null ou default pode não fazer o que pretendia. default e os literais null são implicitamente convertidos em Span<T>.Empty.
CA2266: O ponto de entrada de programas baseado em ficheiros deve começar por #! Quando um programa baseado em ficheiros consiste em múltiplos ficheiros, o ficheiro do ponto de entrada deve começar com uma linha shebang (#!) para o distinguir claramente dos outros ficheiros incluídos.