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.