CA1864: Se prefiere el método "IDictionary.TryAdd(TKey, TValue)"
Propiedad | Value |
---|---|
Identificador de la regla | CA1864 |
Título | Preferir el método ''IDictionary.TryAdd(TKey, 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
Dictionary<TKey,TValue>.Add está protegido por una llamada de Dictionary<TKey,TValue>.ContainsKey(TKey).
Descripción de la regla
Tanto Dictionary<TKey,TValue>.ContainsKey(TKey) como Dictionary<TKey,TValue>.Add realizan una búsqueda, que es redundante. Dictionary<TKey,TValue>.Add también produce una excepción si la clave ya está presente en el diccionario. Es más eficaz llamar a Dictionary<TKey,TValue>.TryAdd, que devuelve un valor booleano que indica si el valor se agregó o no. TryAdd
no sobrescribe el valor de la clave si la clave ya está presente.
Cómo corregir infracciones
Reemplace una llamada a Dictionary<TKey,TValue>.ContainsKey(TKey) seguida de una llamada a Dictionary<TKey,TValue>.Add por una sola llamada a Dictionary<TKey,TValue>.TryAdd.
Ejemplo
El siguiente fragmento de código muestra una infracción de la regla 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
El siguiente fragmento de código corrige la infracción:
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
Cuándo suprimir las advertencias
Es seguro suprimir esta advertencia si el rendimiento no es un problema y si controla la excepción que podría producir Dictionary<TKey,TValue>.Add.
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 CA1864
// The code that's violating the rule is on this line.
#pragma warning restore CA1864
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.CA1864.severity = none
Para obtener más información, consulte Procedimiento para suprimir advertencias de análisis de código.