CA1868 : Appel inutile à 'Contains' pour les jeux
Propriété | Value |
---|---|
Identificateur de la règle | CA1868 |
Titre | Appel inutile à « Contains » pour les jeux |
Catégorie | Performances |
Le correctif est cassant ou non cassant | Sans rupture |
Activé par défaut dans .NET 8 | À titre de suggestion |
Cause
Un appel ISet<T>.Add ou ICollection<T>.Remove un appel est gardé par un appel à Contains. Ou, un appel IImmutableSet<T>.Add ou IImmutableSet<T>.Remove est gardé par un appel à IImmutableSet<T>.Contains.
Description de la règle
Les deux ISet<T>.Add(T) et ICollection<T>.Remove(T) effectuent une recherche, ce qui le rend redondant pour appeler ICollection<T>.Contains(T) au préalable. Il est plus efficace d’appeler Add(T) ou Remove(T) directement, qui retourne une valeur booléenne indiquant si l’élément a été ajouté ou supprimé.
Cette logique s’applique également à IImmutableSet<T>.Add(T) et IImmutableSet<T>.Remove(T), sauf qu’elles retournent un nouveau jeu si l’élément est ajouté ou supprimé, ou le jeu d’origine dans les autres cas.
Comment corriger les violations
Remplacez l’appel à ICollection<T>.Contains(T) (ou IImmutableSet<T>.Contains(T)) suivi d’un appel à ISet<T>.Add(T) ou ICollection<T>.Remove(T) (ou IImmutableSet<T>.Add(T) ou IImmutableSet<T>.Remove(T)) par un seul appel à la dernière méthode.
Exemple
L’extrait de code suivant montre une violation de la règle CA1868 :
void Run(ISet<string> set)
{
if (!set.Contains("Hello World"))
{
set.Add("Hello World");
}
}
Sub Run(set As ISet(Of String))
If Not set.Contains("Hello World") Then
set.Add("Hello World")
End If
End Sub
L’extrait de code suivant corrige la violation :
void Run(ISet<string> set)
{
set.Add("Hello World");
}
Sub Run(set As ISet(Of String))
set.Add("Hello World")
End Sub
Quand supprimer les avertissements
Vous pouvez supprimer cet avertissement sans risque, si les performances ne sont pas un problème.
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 CA1868
// The code that's violating the rule is on this line.
#pragma warning restore CA1868
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.CA1868.severity = none
Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.