CA1710 : Les identificateurs doivent être dotés d'un suffixe correct
Propriété | Value |
---|---|
Identificateur de la règle | CA1710 |
Titre | Les identificateurs doivent être dotés d'un suffixe correct |
Catégorie | Dénomination |
Le correctif est cassant ou non cassant | Rupture |
Activé par défaut dans .NET 8 | Non |
Cause
Un identificateur n’a pas le bon suffixe.
Par défaut, cette règle examine uniquement les identificateurs visibles en externe, mais elle est configurable.
Description de la règle
Par convention, les noms des types qui étendent certains types de base ou qui implémentent certaines interfaces, ou encore des types dérivés de ces types, présentent un suffixe associé au type de base ou à l’interface.
Les conventions de nommage fournissent une recherche commune pour les bibliothèques qui ciblent le common language runtime. Cette cohérence réduit la courbe d’apprentissage requise pour les nouvelles bibliothèques de logiciels et augmente la confiance des clients en ce qui concerne le développement de la bibliothèque par une personne qui a une expertise dans le développement de code managé.
Le tableau suivant répertorie les types de base et les interfaces qui ont des suffixes associés.
Type / interface de base | Suffixe |
---|---|
System.Attribute | Attribut |
System.EventArgs | EventArgs |
System.Exception | Exception |
System.Collections.ICollection | Collection |
System.Collections.IDictionary | Dictionnaire |
System.Collections.IEnumerable | Collection |
System.Collections.Generic.IReadOnlyDictionary<TKey,TValue> | Dictionnaire |
System.Collections.Queue | Collection ou file d’attente |
System.Collections.Stack | Collection ou pile |
System.Collections.Generic.ICollection<T> | Collection |
System.Collections.Generic.IDictionary<TKey,TValue> | Dictionnaire |
System.Data.DataSet | DataSet |
System.Data.DataTable | Collection ou DataTable |
System.IO.Stream | Stream |
System.Security.IPermission | Autorisation |
System.Security.Policy.IMembershipCondition | Condition |
Délégué du gestionnaire d’événements. | EventHandler |
Les types qui implémentent ICollection et sont un type généralisé de structure de données, comme un dictionnaire, une pile ou une file d’attente, et sont des noms autorisés qui fournissent des informations significatives sur l’utilisation prévue du type.
Les types qui implémentent ICollection et sont une collection d’éléments spécifiques ont des noms qui se terminent par le mot « Collection ». Par exemple, une collection d’objets Queue aurait le nom « QueueCollection ». Le suffixe « Collection » signifie que les membres de la collection peuvent être énumérés à l’aide de l’instruction foreach
(For Each
en Visual Basic).
Les types qui implémentent IDictionary ou IReadOnlyDictionary<TKey,TValue> ont des noms qui se terminent par le mot « Dictionary », même si le type implémente également IEnumerable ou ICollection. Les conventions d’affectation de noms de suffixe « Collection » et « Dictionary » permettent aux utilisateurs de faire la distinction entre les deux modèles d’énumération suivants.
Les types avec le suffixe « Collection » suivent ce modèle d’énumération.
foreach(SomeType x in SomeCollection) { }
Les types avec le suffixe « Dictionary » suivent ce modèle d’énumération.
foreach(SomeType x in SomeDictionary.Values) { }
Un objet DataSet se compose d’une collection d’objets DataTable, qui comprennent notamment les collections d’objets System.Data.DataColumn et System.Data.DataRow. Ces collections implémentent ICollection via la classe de base System.Data.InternalDataCollectionBase.
Comment corriger les violations
Renommez le type afin qu’il ait le bon terme en suffixe.
Quand supprimer les avertissements
Il est possible de supprimer un avertissement pour utiliser le suffixe « Collection » si le type est une structure de données généralisée qui peut être étendue ou qui contiendra un ensemble arbitraire d’éléments divers. Dans ce cas, un nom qui fournit des informations importantes sur l’implémentation, les performances ou d’autres caractéristiques de la structure de données peut avoir un sens (par exemple, BinaryTree). Lorsque le type représente une collection d’un type spécifique (par exemple, StringCollection), ne supprimez pas d’avertissement de cette règle, car le suffixe indique que le type peut être énuméré à l’aide d’une instruction foreach
.
Pour les autres suffixes, ne supprimez pas un avertissement de cette règle. Grâce au suffixe, le nom de type rend l’utilisation prévue évidente.
Supprimer un avertissement
Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.
#pragma warning disable CA1710
// The code that's violating the rule is on this line.
#pragma warning restore CA1710
Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none
dans le fichier de configuration.
[*.{cs,vb}]
dotnet_diagnostic.CA1710.severity = none
Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.
Configurer le code à analyser
Utilisez l’option suivante pour configurer les parties de votre codebase sur lesquelles exécuter cette règle.
- Inclure des surfaces d’API spécifiques
- Exclure les types de base indirects
- Suffixes requis supplémentaires
Vous pouvez configurer ces options pour cette règle uniquement, pour toutes les règles auxquelles elles s’appliquent ou pour toutes les règles de cette catégorie (Nommage) auxquelles elles s’appliquent. Pour plus d’informations, consultez Options de configuration des règles de qualité du code.
Inclure des surfaces d’API spécifiques
Vous pouvez configurer les parties de votre codebase sur lesquelles exécuter cette règle, en fonction de leur accessibilité. Par exemple, pour spécifier que la règle doit s’exécuter uniquement sur la surface d’API non publique, ajoutez la paire clé-valeur suivante à un fichier .editorconfig dans votre projet :
dotnet_code_quality.CAXXXX.api_surface = private, internal
Exclure les types de base indirects
Vous pouvez configurer l’exclusion des types de base indirects de la règle. Par défaut, cette option est définie sur true, ce qui limite l’analyse au type de base actuel.
dotnet_code_quality.CA1710.exclude_indirect_base_types = false
Suffixes requis supplémentaires
Vous pouvez fournir des suffixes requis supplémentaires ou remplacer le comportement de certains suffixes codés en dur en ajoutant la paire clé-valeur suivante à un fichier .editorconfig dans votre projet :
dotnet_code_quality.CA1710.additional_required_suffixes = [type]->[suffix]
Séparez plusieurs valeurs par un caractère |
. Les types peuvent être spécifiés dans l’un des formats suivants :
- Nom du type uniquement (inclut tous les types avec le nom, quel que soit le type ou l’espace de noms qui les contient).
- Les noms complets au format d’ID de documentation du symbole, avec un préfixe
T:
facultatif.
Exemples :
Valeur d’option | Récapitulatif |
---|---|
dotnet_code_quality.CA1710.additional_required_suffixes = MyClass->Class |
Tous les types qui héritent de « MyClass » doivent avoir le suffixe « Class ». |
dotnet_code_quality.CA1710.additional_required_suffixes = MyClass->Class|MyNamespace.IPath->Path |
Tous les types qui héritent de « MyClass » doivent avoir le suffixe « Class » ET tous les types qui implémentent « MyNamespace.IPath » doivent avoir le suffixe « Path ». |
dotnet_code_quality.CA1710.additional_required_suffixes = T:System.Data.IDataReader->{} |
Remplace les suffixes intégrés. Dans ce cas, il n’est plus nécessaire que tous les types qui implémentent « IDataReader » se terminent par « Collection ». |
Règles associées
CA1711 : Les identificateurs ne doivent pas porter un suffixe incorrect