CA1854 : Préférer la méthode IDictionary.TryGetValue(TKey, out TValue)

Propriété Value
Identificateur de la règle CA1854
Titre Préférer la méthode IDictionary.TryGetValue(TKey, out TValue)
Catégorie Performances
Le correctif est cassant ou non cassant Sans rupture
Activé par défaut dans .NET 8 Comme suggestion

Cause

Accès à un élément IDictionary protégé par une vérification IDictionary.ContainsKey.

Description de la règle

Lorsqu’un élément d’un IDictionary est accessible, l’implémentation de l’indexeur recherche une valeur Null en appelant la méthode IDictionary.ContainsKey. Si vous appelez IDictionary.ContainsKey également dans une clause if pour protéger une recherche de valeur, deux recherches sont effectuées quand une seule est nécessaire.

Comment corriger les violations

Remplacez l’appel IDictionary.ContainsKey et l’accès à l’élément par un appel à la méthode IDictionary.TryGetValue.

Violation :

public string? GetValue(string key)
{
    if (_dictionary.ContainsKey(key))
    {
        return _dictionary[key];
    }

    return null;
}
Public Function GetValue(key As String) As String
    If _dictionary.ContainsKey(key) Then
        Return _dictionary(key)
    End If

    Return Nothing
End Function

Correctif :

public string? GetValue(string key)
{
    if (_dictionary.TryGetValue(key, out string? value))
    {
        return value;
    }

    return null;
}
Public Function GetValue(key As String) As String
    Dim value as String

    If _dictionary.TryGetValue(key, value) Then
        Return value
    End If

    Return Nothing
End Function

Quand supprimer les avertissements

Supprimez cet avertissement en toute sécurité si vous utilisez une implémentation personnalisée de IDictionary qui évite une recherche de valeur lors de l’exécution de la vérification IDictionary.ContainsKey.

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

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

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