CA1854: Se prefiere el método IDictionary.TryGetValue(TKey, out TValue)

Propiedad Value
Identificador de la regla CA1854
Título Preferir el método IDictionary.TryGetValue(TKey, out TValue)
Categoría Rendimiento
La corrección es problemática o no problemática Poco problemático
Habilitado de forma predeterminada en .NET 8 Como sugerencia

Causa

Acceso a un elemento IDictionary protegido por una comprobación IDictionary.ContainsKey.

Descripción de la regla

Cuando se tiene acceso a un elemento de IDictionary, la implementación del indexador comprueba si hay un valor NULL llamando al método IDictionary.ContainsKey. Si también llama a IDictionary.ContainsKey en una cláusula if para proteger una búsqueda de valores, se realizan dos búsquedas cuando solo se necesita una.

Cómo corregir infracciones

Reemplace la invocación IDictionary.ContainsKey y el acceso al elemento por una llamada al método IDictionary.TryGetValue.

Infracción:

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

Corrección:

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

Cuándo suprimir las advertencias

Es seguro suprimir esta advertencia si usa una implementación personalizada de IDictionary que evita una búsqueda de valores al realizar la comprobación IDictionary.ContainsKey.

Supresión de una advertencia

Si solo quiere suprimir una única infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y volver a habilitar la regla.

#pragma warning disable CA1854
// The code that's violating the rule is on this line.
#pragma warning restore CA1854

Para deshabilitar la regla de un archivo, una carpeta o un proyecto, establezca su gravedad en none del archivo de configuración.

[*.{cs,vb}]
dotnet_diagnostic.CA1854.severity = none

Para obtener más información, consulte Procedimiento para suprimir advertencias de análisis de código.