CA1828: Jangan gunakan CountAsync/LongCountAsync saat AnyAsync dapat digunakan

Properti Nilai
ID Aturan CA1828
Judul Jangan gunakan CountAsync/LongCountAsync saat AnyAsync dapat digunakan
Kategori Performa
Perbaikan bersifat merusak atau tidak merusak Tidak terputus
Diaktifkan secara default di .NET 10 Sebagai saran
Bahasa yang berlaku C# dan Visual Basic

Penyebab

Metode CountAsync atau LongCountAsync digunakan di mana AnyAsync metode akan lebih efisien.

Deskripsi aturan

Aturan ini menandai panggilan pada metode LINQ CountAsync dan LongCountAsync yang digunakan untuk memeriksa apakah koleksi memiliki paling tidak satu elemen. Panggilan metode ini mengharuskan enumerasi seluruh koleksi untuk menghitung jumlah. Pemeriksaan yang sama lebih cepat dengan metode AnyAsync karena menghindari enumerasi koleksi.

Cara memperbaiki pelanggaran

Untuk memperbaiki pelanggaran, ganti panggilan metode CountAsync atau LongCountAsync dengan metode AnyAsync. Misalnya, dua cuplikan kode berikut menunjukkan pelanggaran aturan dan cara memperbaikinya:

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

Tips

Perbaikan kode tersedia untuk aturan ini di Visual Studio. Untuk menggunakannya, posisikan kursor pada pelanggaran dan tekan Ctrl+. (titik). Pilih Jangan gunakan CountAsync() atau LongCountAsync() saat AnyAsync() dapat digunakan dari daftar opsi yang disajikan.

Perbaikan kode untuk CA1828 - Jangan gunakan CountAsync() atau LongCountAsync() ketika AnyAsync() dapat digunakan

Kapan harus menekan peringatan

Anda dapat menyembunyikan pelanggaran aturan ini jika tidak khawatir tentang dampak performa dari enumerasi koleksi yang tidak perlu untuk menghitung jumlahnya.

Menyembunyikan peringatan

Jika Anda hanya ingin menyembunyikan satu pelanggaran, tambahkan arahan praprosedur ke file sumber Anda untuk dinonaktifkan lalu aktifkan kembali aturannya.

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

Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none dalam file konfigurasi.

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

Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.

Lihat juga