CA1710: Identificadores devem ter um sufixo correto
Property | Valor |
---|---|
ID da regra | CA1710 |
Título | Identificadores devem ter um sufixo correto |
Categoria | Nomenclatura |
Correção interruptiva ou sem interrupção | Quebra |
Habilitado por padrão no .NET 8 | Não |
Causa
Um identificador não tem o sufixo correto.
Por padrão, essa regra apenas analisará os identificadores visíveis externamente, mas isso é configurável.
Descrição da regra
Por convenção, os nomes dos tipos que estendem determinados tipos básicos ou que implementam determinadas interfaces, ou tipos derivados desses tipos, têm um sufixo associado ao tipo básico ou à interface.
As convenções de nomenclatura fornecem uma aparência comum para bibliotecas destinadas ao Common Language Runtime. Isso reduz a curva de aprendizado necessária para novas bibliotecas de software e aumenta a confiança do cliente de que a biblioteca foi desenvolvida por alguém com experiência no desenvolvimento de código gerenciado.
A tabela a seguir lista os tipos básicos e interfaces que possuem sufixos associados.
Tipo/interface base | Sufixo |
---|---|
System.Attribute | Atributo |
System.EventArgs | EventArgs |
System.Exception | Exceção |
System.Collections.ICollection | Coleção |
System.Collections.IDictionary | Dicionário |
System.Collections.IEnumerable | Coleção |
System.Collections.Generic.IReadOnlyDictionary<TKey,TValue> | Dicionário |
System.Collections.Queue | Coleção ou Fila |
System.Collections.Stack | Coleção ou Pilha |
System.Collections.Generic.ICollection<T> | Coleção |
System.Collections.Generic.IDictionary<TKey,TValue> | Dicionário |
System.Data.DataSet | DataSet |
System.Data.DataTable | Coleta ou DataTable |
System.IO.Stream | STREAM |
System.Security.IPermission | Permissão |
System.Security.Policy.IMembershipCondition | Condição |
Um delegado de manipulador de eventos. | EventHandler |
Os tipos que implementam ICollection e são um tipo generalizado de estrutura de dados, como um dicionário, uma pilha ou uma fila, são nomes permitidos que fornecem informações significativas sobre o uso pretendido do tipo.
Os tipos que implementam ICollection e são uma coleção de itens específicos têm nomes que terminam com a palavra 'Collection'. Por exemplo, uma coleção de objetos Queue teria o nome 'QueueCollection'. O sufixo 'Collection' significa que os membros da coleção podem ser enumerados usando a instrução foreach
(For Each
no Visual Basic).
Tipos que implementam IDictionary ou IReadOnlyDictionary<TKey,TValue> têm nomes que terminam com a palavra 'Dictionary' mesmo que o tipo também implemente IEnumerable ou ICollection. As convenções de nomenclatura de sufixo 'Collection' e 'Dictionary' permitem que os usuários distingam entre os dois padrões de enumeração a seguir.
Os tipos com o sufixo 'Collection' seguem esse padrão de enumeração.
foreach(SomeType x in SomeCollection) { }
Os tipos com o sufixo 'Collection' seguem esse padrão de enumeração.
foreach(SomeType x in SomeDictionary.Values) { }
Um objeto DataSet consiste em uma coleção de objetos DataTable que consistem em coleções e objetos System.Data.DataColumnSystem.Data.DataRow, entre outros. Essas coleções implementam ICollection por meio da classe base System.Data.InternalDataCollectionBase.
Como corrigir violações
Renomeie o tipo para que seja sufixado com o termo correto.
Quando suprimir avisos
É seguro suprimir um aviso para usar o sufixo 'Collection' se o tipo for uma estrutura de dados generalizada que pode ser estendida ou que conterá um conjunto arbitrário de diversos itens. Nesse caso, um nome que forneça as informações significativas sobre a implementação, desempenho ou outras características da estrutura de dados pode fazer sentido (por exemplo, BinaryTree). Nos casos em que o tipo representa uma coleção de um tipo específico (por exemplo, StringCollection), não suprime um aviso dessa regra porque o sufixo indica que o tipo pode ser enumerado usando uma instrução foreach
.
Para outros sufixos, não suprima um aviso dessa regra. O sufixo permite que o uso pretendido seja evidente a partir do nome do tipo.
Suprimir um aviso
Para suprimir apenas uma violação, adicione diretivas de pré-processador ao arquivo de origem a fim de desabilitar e, em seguida, reabilitar a regra.
#pragma warning disable CA1710
// The code that's violating the rule is on this line.
#pragma warning restore CA1710
Para desabilitar a regra em um arquivo, uma pasta ou um projeto, defina a severidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA1710.severity = none
Para obter mais informações, confira Como suprimir avisos de análise de código.
Configurar código para analisar
Use as opções a seguir para configurar em quais partes da base de código essa regra deve ser executada.
- Incluir superfícies de API específicas
- Excluir tipos de base indiretos
- Sufixos necessários adicionais
Você pode configurar essas opções apenas para essa regra, para todas as regras às quais ela se aplica ou para todas as regras nessa categoria (Nomenclatura) às quais ela se aplica. Para saber mais, confira Opções de configuração de regra de qualidade de código.
Incluir superfícies de API específicas
É possível configurar em quais partes da base de código essa regra deverá ser executada, com base na acessibilidade. Por exemplo, para especificar que a regra deverá ser executada apenas na superfície de API não pública, adicione o seguinte par chave-valor a um arquivo .editorconfig no projeto:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Excluir tipos de base indiretos
Você poderá configurar se quiser excluir tipos de base indiretos da regra. Por padrão, essa opção é definida como verdadeira, o que restringe a análise ao tipo base atual.
dotnet_code_quality.CA1710.exclude_indirect_base_types = false
Sufixos adicionais necessários
É possível fornecer sufixos necessários adicionais ou substituir o comportamento de alguns sufixos codificados adicionando o seguinte par chave-valor a um arquivo .editorconfig no projeto:
dotnet_code_quality.CA1710.additional_required_suffixes = [type]->[suffix]
Separe vários valores com um caractere |
. Os tipos podem ser especificados em um dos seguintes formatos:
- Somente nome do tipo (inclui todos os tipos com o nome, independentemente do tipo ou namespace que contém).
- Nomes totalmente qualificados no formato de ID de documentação do símbolo, com um prefixo opcional
T:
.
Exemplos:
Valor de Opção | Resumo |
---|---|
dotnet_code_quality.CA1710.additional_required_suffixes = MyClass->Class |
Todos os tipos que herdam de 'MyClass' são necessários para ter o sufixo 'Class'. |
dotnet_code_quality.CA1710.additional_required_suffixes = MyClass->Class|MyNamespace.IPath->Path |
Todos os tipos que herdam de 'MyClass' são necessários para ter o sufixo 'Class' E todos os tipos que implementam 'MyNamespace.IPath' são necessários para ter o sufixo 'Path'. |
dotnet_code_quality.CA1710.additional_required_suffixes = T:System.Data.IDataReader->{} |
Substitui sufixos internos. Nesse caso, todos os tipos que implementam 'IDataReader' não são mais necessários para terminar em 'Coleção'. |
Regras relacionadas
CA1711: Identificadores não devem ter um sufixo incorreto