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 null default |
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. |
Colaborar conosco no GitHub
A fonte deste conteúdo pode ser encontrada no GitHub, onde você também pode criar e revisar problemas e solicitações de pull. Para obter mais informações, confira o nosso guia para colaboradores.