CA1828: AnyAsync kullanılabildiğinde CountAsync/LongCountAsync kullanmayın

Özellik Değer
Kural Kimliği CA1828
Başlık AnyAsync kullanılabiliyorsa CountAsync/LongCountAsync kullanma
Kategori Performans
Hataya neden olan veya bozulmayan düzeltme Hataya neden olmayan
.NET 8'de varsayılan olarak etkin Öneri olarak

Neden

CountAsync veya LongCountAsync yöntemi, yöntemin AnyAsync daha verimli olacağı yerde kullanılmıştır.

Kural açıklaması

Bu kural, koleksiyonun CountAsync en az bir öğesi olup olmadığını denetlemek için kullanılan ve LongCountAsync LINQ yöntemi çağrılarına bayrak ekler. Bu yöntem çağrıları, sayımı hesaplamak için koleksiyonun tamamının numaralanmasını gerektirir. Aynı denetim yöntemiyle AnyAsync daha hızlıdır, ancak koleksiyonu numaralandırmaktan kaçınır.

İhlalleri düzeltme

Bir ihlali düzeltmek için veya LongCountAsync yöntemi çağrısını CountAsyncAnyAsync yöntemiyle değiştirin. Örneğin, aşağıdaki iki kod parçacığı kuralın ihlalini ve nasıl düzeltileceğini gösterir:

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";
}

Bahşiş

Visual Studio'da bu kural için bir kod düzeltmesi kullanılabilir. Bunu kullanmak için imleci ihlalin üzerine getirin ve Ctrl+ tuşuna (nokta) basın. Sunulan seçenekler listesinden AnyAsync() kullanılabildiğinde CountAsync() veya LongCountAsync() kullanma'yı seçin.

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

Uyarıların ne zaman bastırılması gerekiyor?

Gereksiz toplama numaralandırmasından sayıyı hesaplamak için performans etkisi konusunda endişeniz yoksa, bu kuralın ihlalini bastırmak güvenlidir.

Uyarıyı gizleme

Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.

#pragma warning disable CA1828
// The code that's violating the rule is on this line.
#pragma warning restore CA1828

Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini noneolarak ayarlayın.

[*.{cs,vb}]
dotnet_diagnostic.CA1828.severity = none

Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.

Ayrıca bkz.