CA1827 : N’utilisez pas Count()/LongCount() quand Any() peut être utilisé
Propriété | Value |
---|---|
Identificateur de la règle | CA1827 |
Titre | Ne pas utiliser Count()/LongCount() quand Any() peut être utilisé |
Catégorie | Performances |
Le correctif est cassant ou non cassant | Sans rupture |
Activé par défaut dans .NET 8 | À titre de suggestion |
Cause
La méthode Count() ou LongCount() a été utilisée où la méthode Any() serait plus efficace.
Description de la règle
Cette règle signale les appels de méthode LINQ Count() et LongCount() utilisés pour vérifier si la collection comporte au moins un élément. Ces méthodes énumèrent la totalité de la collection pour calculer le nombre. La même vérification est plus rapide avec la méthode Any(), car aucune énumération n’est alors nécessaire.
Notes
Cette règle est similaire à CA1860 : Évitez d’utiliser la méthode d’extension « Enumerable.Any() ». Toutefois, cette règle suggère d’utiliser la Count
propriété, tandis que cette règle s’applique à la méthode d’extension Linq Count()
.
Comment corriger les violations
Pour corriger une violation, remplacez l’appel de méthode Count ou LongCount par la méthode Any. Par exemple, les deux extraits de code suivants montrent une violation de la règle et indiquent comment la corriger :
using System.Collections.Generic;
using System.Linq;
class C
{
public string M1(IEnumerable<string> list)
=> list.Count() != 0 ? "Not empty" : "Empty";
public string M2(IEnumerable<string> list)
=> list.LongCount() > 0 ? "Not empty" : "Empty";
}
using System.Collections.Generic;
using System.Linq;
class C
{
public string M1(IEnumerable<string> list)
=> list.Any() ? "Not empty" : "Empty";
public string M2(IEnumerable<string> list)
=> list.Any() ? "Not empty" : "Empty";
}
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 Ne pas utiliser Count() ni LongCount() lorsque Any() peut être employé dans la liste des options qui vous est présentée.
Quand supprimer les avertissements
Vous pouvez sans risque supprimer une violation de cette règle si vous ne vous souciez pas de l’impact sur les performances de l’énumération inutile de la collection pour calculer le nombre.
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 CA1827
// The code that's violating the rule is on this line.
#pragma warning restore CA1827
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.CA1827.severity = none
Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.
Règles associées
- CA1826 : Utiliser une propriété au lieu de la méthode Linq Enumerable
- 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()
- CA1860 : Éviter d’utiliser la méthode d’extension 'Enumerable.Any()'