CA1826 : Utiliser une propriété au lieu de la méthode Linq Enumerable
Propriété | Value |
---|---|
Identificateur de la règle | CA1826 |
Titre | Utiliser une propriété au lieu de la méthode Linq Enumerable |
Catégorie | Performances |
Le correctif est cassant ou non cassant | Sans rupture |
Activé par défaut dans .NET 8 | Comme suggestion |
Cause
La méthode LINQ Enumerable a été utilisée sur un type qui prend en charge une propriété équivalente et plus efficace.
Description de la règle
Cette règle marque les appels de méthode LINQ Enumerable sur des collections de types qui ont des propriétés équivalentes mais plus efficaces pour extraire les mêmes données.
Cette règle analyse les types de collection qui implémentent IReadOnlyList<T>, mais pas IList<T>.
Cette règle marque les appels aux méthodes suivantes sur ces types de collections :
- System.Linq.Enumerable.Count
- System.Linq.Enumerable.First
- System.Linq.Enumerable.FirstOrDefault
- System.Linq.Enumerable.Last
- System.Linq.Enumerable.LastOrDefault
Les types et méthodes de collection analysés peuvent être étendus à l’avenir pour couvrir davantage de cas.
Comment corriger les violations
Pour corriger une violation, remplacez l’appel de méthode Enumerable par l’accès aux propriétés. Par exemple, les deux extraits de code suivants montrent une violation de la règle et comment la corriger :
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);
}
}
Conseil
Un correctif de code est disponible pour cette règle dans Visual Studio. Pour l’utiliser, positionnez le curseur sur la violation et appuyez sur Ctrl+. (point). Choisissez Utiliser l’indexeur dans la liste des options présentée.
Quand supprimer les avertissements
Vous pouvez supprimer une violation de cette règle en toute sécurité si vous ne vous souciez pas de l’impact des performances dû à des appels de méthode Enumerable spécifiques.
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 CA1826
// The code that's violating the rule is on this line.
#pragma warning restore CA1826
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.CA1826.severity = none
Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.
Configurer le code à analyser
Utilisez l’option suivante pour configurer les parties de votre codebase sur lesquelles exécuter cette règle.
Exclure les méthodes FirstOrDefault et LastOrDefault
Vous pouvez configurer cette règle de manière à exclure les méthodes Enumerable.FirstOrDefault et Enumerable.LastOrDefault de l’analyse. Vous pouvez envisager d’exclure ces méthodes si la lisibilité est un problème, car le code que vous écrivez pour les remplacer n’est pas facilement lisible. Pour exclure ces méthodes, ajoutez la paire clé-valeur suivante à un fichier .editorconfig dans votre projet :
dotnet_code_quality.CA1826.exclude_ordefault_methods = true
Règles associées
- CA1827 : N’utilisez pas Count/LongCount quand Any peut être utilisé
- CA1828 : N’utilisez pas CountAsync/LongCountAsync quand AnyAsync peut être utilisé
- CA1829 : Utilisez la propriété Length/Count au lieu de la méthode Enumerable.Count