CA1826: Usar la propiedad en lugar del método Linq Enumerable
Propiedad | Value |
---|---|
Identificador de la regla | CA1826 |
Título | Usar la propiedad en lugar del método Linq Enumerable |
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
El método Enumerable de LINQ se ha usado en un tipo que admite una propiedad equivalente y más eficaz.
Descripción de la regla
Esta regla marca las llamadas al método LINQ Enumerable en colecciones de tipos que tienen propiedades equivalentes pero más eficientes para capturar los mismos datos.
Esta regla analiza los tipos de colección que implementan IReadOnlyList<T>, pero no IList<T>.
Esta regla marca las llamadas a los siguientes métodos en estos tipos de colección:
- System.Linq.Enumerable.Count
- System.Linq.Enumerable.First
- System.Linq.Enumerable.FirstOrDefault
- System.Linq.Enumerable.Last
- System.Linq.Enumerable.LastOrDefault
Los tipos y métodos de colección analizados pueden ampliarse en el futuro para cubrir más casos.
Cómo corregir infracciones
Para corregir una infracción, sustituya la llamada de método Enumerable por acceso de propiedad. Por ejemplo, en los dos fragmentos de código siguientes se muestra una infracción de la regla y cómo corregirla:
using System;
using System.Collections.Generic;
using System.Linq;
class C
{
public void M(IReadOnlyList<string> list)
{
Console.Write(list.First());
Console.Write(list.Last());
Console.Write(list.Count());
}
}
using System;
using System.Collections.Generic;
class C
{
public void M(IReadOnlyList<string> list)
{
Console.Write(list[0]);
Console.Write(list[list.Count - 1]);
Console.Write(list.Count);
}
}
Sugerencia
Hay disponible una corrección de código para esta regla en Visual Studio. Para usarla, coloque el cursor sobre la infracción y presione Ctrl+. (punto). Elija Usar el indizador en la lista de opciones que se presentan.
Cuándo suprimir las advertencias
Se puede suprimir una infracción de esta regla si no le preocupa el impacto en el rendimiento de las llamadas de método Enumerable específicas.
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 CA1826
// The code that's violating the rule is on this line.
#pragma warning restore CA1826
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.CA1826.severity = none
Para obtener más información, consulte Procedimiento para suprimir advertencias de análisis de código.
Configuración del código para analizar
Use la opción siguiente para configurar en qué partes del código base ejecutar esta regla.
Exclusión de los métodos FirstOrDefault y LastOrDefault
Puede configurar esta regla para excluir los métodos Enumerable.FirstOrDefault y Enumerable.LastOrDefault del análisis. Puede considerar la posibilidad de excluir estos métodos si la legibilidad es un problema, ya que el código que escribiría para reemplazarlos no es fácil de leer. Para excluir estos métodos, agregue el siguiente par clave-valor a un archivo .editorconfig en el proyecto:
dotnet_code_quality.CA1826.exclude_ordefault_methods = true
Reglas relacionadas
- CA1827: No usar Count/LongCount si se puede usar Any
- CA1828: No usar CountAsync/LongCountAsync si se puede usar AnyAsync
- CA1829: Usar la propiedad Length/Count en lugar del método Enumerable.Count