CA1828 : N’utilisez pas CountAsync/LongCountAsync quand AnyAsync peut être utilisé

Propriété Value
Identificateur de la règle CA1828
Titre N’utilisez pas CountAsync/LongCountAsync quand AnyAsync 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 CountAsync ou LongCountAsync a été utilisée alors que la méthode AnyAsync serait plus efficace.

Description de la règle

Cette règle signale les appels de méthode LINQ CountAsync et LongCountAsync utilisés pour vérifier si la collection comporte au moins un élément. Ces appels de méthode supposent d’énumérer la totalité de la collection pour calculer le nombre. La même vérification est plus rapide avec la méthode AnyAsync, car aucune énumération n’est alors nécessaire.

Comment corriger les violations

Pour corriger une violation, remplacez l’appel de méthode CountAsync ou LongCountAsync par la méthode AnyAsync. Par exemple, les deux extraits de code suivants montrent une violation de la règle et indiquent comment la corriger :

using System.Linq;
using System.Threading.Tasks;
using static Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions;

class C
{
    public async Task<string> M1Async(IQueryable<string> list)
        => await list.CountAsync() != 0 ? "Not empty" : "Empty";

    public async Task<string> M2Async(IQueryable<string> list)
        => await list.LongCountAsync() > 0 ? "Not empty" : "Empty";
}
using System.Linq;
using System.Threading.Tasks;
using static Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions;

class C
{
    public async Task<string> M1Async(IQueryable<string> list)
        => await list.AnyAsync() ? "Not empty" : "Empty";

    public async Task<string> M2Async(IQueryable<string> list)
        => await list.AnyAsync() ? "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 N’utilisez pas CountAsync() ou LongCountAsync() quand AnyAsync() peut être utilisé dans la liste des options présentées.

Code fix for CA1828 - Do not use CountAsync() or LongCountAsync() when AnyAsync() can be used

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 CA1828
// The code that's violating the rule is on this line.
#pragma warning restore CA1828

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.CA1828.severity = none

Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.

Voir aussi