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é par défaut dans .NET 8 À 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");
    }
}
Sub Run(dictionary As IDictionary(Of Integer, String))
    If Not dictionary.ContainsKey(2) Then
        dictionary.Add(2, "Hello World")
    End If
End Sub

L’extrait de code suivant corrige la violation :

void Run(IDictionary<int, string> dictionary)
{
    dictionary.TryAdd(2, "Hello World");
}
Sub Run(dictionary As IDictionary(Of Integer, String))
    dictionary.TryAdd(2, "Hello World")
End Sub

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.