Bagikan melalui


CA1827: Jangan gunakan Count()/LongCount() ketika Any() dapat digunakan

Properti Nilai
ID Aturan CA1827
Judul Jangan gunakan Count()/LongCount() ketika Any() dapat digunakan
Golongan Performa
Perbaikan bersifat disruptif atau non-disruptif Non-disruptif
Diaktifkan secara default di .NET 8 Sebagai saran

Penyebab

Metode Count() atau LongCount() digunakan di mana metode Any() akan lebih efisien.

Deskripsi aturan

Aturan ini menandai panggilan metode LINQ Count() dan LongCount() yang digunakan untuk memeriksa apakah koleksi memiliki setidaknya satu elemen. Metode ini menghitung seluruh koleksi untuk menghitung hitungan. Pemeriksaan yang sama lebih cepat dengan metode Any() karena menghindari menghitung koleksi.

Catatan

Aturan ini mirip dengan CA1860: Hindari menggunakan metode ekstensi 'Enumerable.Any()'. Namun aturan tersebut menyarankan penggunaan Countproperti , sementara aturan ini berlaku untuk metode ekstensi LinqCount().

Cara memperbaiki pelanggaran

Untuk memperbaiki pelanggaran, ganti panggilan metode Count atau LongCount dengan metode Any. Misalnya, dua cuplikan kode berikut menunjukkan pelanggaran aturan dan cara memperbaikinya:

using System.Collections.Generic;
using System.Linq;

class C
{
    public string M1(IEnumerable<string> list)
        => list.Count() != 0 ? "Not empty" : "Empty";

    public string M2(IEnumerable<string> list)
        => list.LongCount() > 0 ? "Not empty" : "Empty";
}
using System.Collections.Generic;
using System.Linq;

class C
{
    public string M1(IEnumerable<string> list)
        => list.Any() ? "Not empty" : "Empty";

    public string M2(IEnumerable<string> list)
        => list.Any() ? "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 Count() atau LongCount() jika Any() dapat digunakan dari daftar opsi yang ditampilkan.

Code fix for CA1827 - Do not use Count() or LongCount() when Any() 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 CA1827
// The code that's violating the rule is on this line.
#pragma warning restore CA1827

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

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

Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.

Baca juga