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 9 | 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.