CA1836 : Préférer IsEmpty à Count si disponible
Propriété | Value |
---|---|
Identificateur de la règle | CA1836 |
Titre | Préférer IsEmpty à Count si disponible |
Catégorie | Performances |
Le correctif est cassant ou non cassant | Sans rupture |
Activé par défaut dans .NET 8 | À titre de suggestion |
Cause
La propriété Length
ou Count
ou la méthode d’extension Count<TSource>(IEnumerable<TSource>) a été utilisée pour déterminer si l’objet contient ou non des éléments en comparant la valeur à 0
ou 1
, et l’objet a une propriété IsEmpty
plus efficace qui pourrait être utilisée à la place.
Description de la règle
Cette règle signale les appels aux propriétés Count
et Length
ou aux méthodes LINQ Count<TSource>(IEnumerable<TSource>) et LongCount<TSource>(IEnumerable<TSource>) lorsqu’elles sont utilisées pour déterminer si l’objet contient des éléments et que l’objet a une propriété IsEmpty
plus efficace.
L’analyse de cette règle se chevauchait à l’origine avec les règles similaires CA1827, CA1828 et CA1829. Les analyseurs de ces règles ont été fusionnés avec celui de CA1836 pour signaler le meilleur diagnostic en cas de chevauchement.
Comment corriger les violations
Pour corriger une violation, remplacez l’appel de méthode Count<TSource>(IEnumerable<TSource>) ou LongCount<TSource>(IEnumerable<TSource>) ou l’accès à la propriété Length
ou Count
lorsqu’il est utilisé dans une opération qui détermine si l’objet est vide avec l’utilisation de l’accès aux propriétés IsEmpty
. Par exemple, les deux extraits de code suivants montrent une violation de la règle et comment la corriger :
using System.Collections.Concurrent;
class C
{
ConcurrentQueue<int> _queue;
public bool IsEmpty => _queue.Count == 0;
}
using System.Collections.Concurrent;
class C
{
ConcurrentQueue<int> _queue;
public bool IsEmpty => _queue.IsEmpty;
}
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 Préférer 'IsEmpty' à 'Count' pour déterminer si l’objet contient ou non des éléments de la liste des options présentée.
Quand supprimer les avertissements
Vous pouvez sans risque supprimer une violation de cette règle si vous n’êtes pas préoccupé par l’impact sur les performances de l’énumération d’éléments inutile 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 CA1836
// The code that's violating the rule is on this line.
#pragma warning restore CA1836
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.CA1836.severity = none
Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.
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