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.

Code fix for CA1836 - Prefer 'IsEmpty' over 'Count' to determine whether the object contains or not any items

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.

Voir aussi