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 9 | 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 Count
properti , sementara aturan ini berlaku untuk metodeCount()
.
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.
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.
Aturan terkait
- CA1826: Gunakan properti, bukan metode Linq Enumerable
- CA1828: Jangan gunakan CountAsync/LongCountAsync saat AnyAsync dapat digunakan
- CA1829: Gunakan properti Panjang/Hitung alih-alih metode Enumerable.Count()
- CA1860: Hindari menggunakan metode ekstensi 'Enumerable.Any()'