Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
| Properti | Nilai |
|---|---|
| ID Aturan | CA1836 |
| Judul | Utamakan IsEmpty dibandingkan Count jika tersedia |
| 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
Properti Count atau Length metode ekstensi Count<TSource>(IEnumerable<TSource>) digunakan untuk menentukan apakah objek berisi item apa pun dengan membandingkan nilai dengan 0 atau 1, dan objek tersebut memiliki properti IsEmpty yang lebih efisien yang dapat digunakan sebagai gantinya.
Deskripsi aturan
Aturan ini memberi bendera panggilan ke properti Count dan Length atau metode LINQ Count<TSource>(IEnumerable<TSource>) dan LongCount<TSource>(IEnumerable<TSource>) ketika digunakan untuk menentukan apakah objek berisi item dan objek tersebut memiliki properti IsEmpty yang lebih efisien.
Analisis aturan ini awalnya tumpang tindih dengan aturan serupa CA1827, CA1828, dan CA1829; penganalisis aturan tersebut digabungkan bersama dengan aturan untuk CA1836 guna melaporkan diagnosis terbaik jika terjadi tumpang tindih.
Cara memperbaiki pelanggaran
Untuk memperbaiki pelanggaran, ganti panggilan metode Count<TSource>(IEnumerable<TSource>) atau LongCount<TSource>(IEnumerable<TSource>) atau akses properti Length atau Count saat digunakan dalam operasi yang menentukan apakah objek kosong, dengan menggunakan akses properti IsEmpty. Misalnya, dua cuplikan kode berikut menunjukkan pelanggaran aturan dan cara memperbaikinya:
using System.Collections.Concurrent;
class C
{
ConcurrentQueue<int> _queue;
public bool IsEmpty => _queue.Count == 0;
}
using System.Collections.Concurrent;
class C
{
ConcurrentQueue<int> _queue;
public bool IsEmpty => _queue.IsEmpty;
}
Tips
Perbaikan kode tersedia untuk aturan ini di Visual Studio. Untuk menggunakannya, posisikan kursor pada pelanggaran dan tekan Ctrl+. (titik). Pilih Utamakan 'IsEmpty' daripada 'Count' untuk menentukan apakah objek berisi item atau tidak dari daftar opsi yang ditampilkan.
Kapan harus menekan peringatan
Sebaiknya abaikan pelanggaran atas aturan ini jika Anda tidak mengkhawatirkan dampak pada performa dari enumerasi item yang tidak diperlukan dalam menghitung jumlah.
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 CA1836
// The code that's violating the rule is on this line.
#pragma warning restore CA1836
Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none dalam file konfigurasi.
[*.{cs,vb}]
dotnet_diagnostic.CA1836.severity = none
Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.
Aturan terkait
- CA1827: Jangan gunakan Count/LongCount jika Any dapat digunakan
- CA1828: Jangan gunakan CountAsync/LongCountAsync saat AnyAsync dapat digunakan
- CA1829: Gunakan properti Length/Count alih-alih metode Enumerable.Count