Lire en anglais

Partager via


CA1864 : préférer la méthode « IDictionary.TryAdd(TKey, TValue) »

Propriété Value
Identificateur de la règle CA1864
Titre Préférer la méthode 'IDictionary.TryAdd(TKey, TValue)'
Catégorie Performances
Le correctif est cassant ou non cassant Sans rupture
Activée par défaut dans .NET 9 À titre de suggestion

Cause

Dictionary<TKey,TValue>.Add est protégé par un appel Dictionary<TKey,TValue>.ContainsKey(TKey).

Description de la règle

Dictionary<TKey,TValue>.ContainsKey(TKey) et Dictionary<TKey,TValue>.Add effectuent une recherche, ce qui est redondant. Dictionary<TKey,TValue>.Add lève également une exception si la clé est déjà présente dans le dictionnaire. Il est plus efficace d’appeler Dictionary<TKey,TValue>.TryAdd, qui retourne une valeur booléenne indiquant si la valeur a été ajoutée ou non. TryAdd ne remplace pas la valeur de la clé si la clé est déjà présente.

Comment corriger les violations

Remplacez un appel à Dictionary<TKey,TValue>.ContainsKey(TKey) qui est suivi d’un appel à Dictionary<TKey,TValue>.Add par un appel unique à Dictionary<TKey,TValue>.TryAdd.

Exemple

L’extrait de code suivant montre une violation de CA1864 :

void Run(IDictionary<int, string> dictionary)
{
    if(!dictionary.ContainsKey(2)) {
        dictionary.Add(2, "Hello World");
    }
}

L’extrait de code suivant corrige la violation :

void Run(IDictionary<int, string> dictionary)
{
    dictionary.TryAdd(2, "Hello World");
}

Quand supprimer les avertissements

Il est prudent de supprimer cet avertissement si les performances ne sont pas un problème et si vous gérez l’exception qui peut être levée par Dictionary<TKey,TValue>.Add.

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 CA1864
// The code that's violating the rule is on this line.
#pragma warning restore CA1864

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.CA1864.severity = none

Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.