Bagikan melalui


CA1828: Jangan gunakan CountAsync/LongCountAsync saat AnyAsync dapat digunakan

Properti Nilai
ID Aturan CA1828
Judul Jangan gunakan CountAsync/LongCountAsync saat AnyAsync dapat digunakan
Golongan Performa
Perbaikan bersifat disruptif atau non-disruptif Non-disruptif
Diaktifkan secara default di .NET 8 Sebagai saran

Penyebab

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

Deskripsi aturan

Aturan ini memberi bendera panggilan metode LINQ CountAsync dan LongCountAsync yang digunakan untuk memeriksa apakah koleksi memiliki setidaknya 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";
}

Tip

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.

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

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.

Baca juga