CA1836: Utamakan IsEmpty daripada Count jika tersedia
Properti | Nilai |
---|---|
ID Aturan | CA1836 |
Judul | Lebih suka IsEmpty daripada Hitungan jika tersedia |
Golongan | Performa |
Perbaikan bersifat disruptif atau non-disruptif | Non-disruptif |
Diaktifkan secara default di .NET 9 | Sebagai saran |
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 mengatasi pelanggaran, ganti panggilan metode Count<TSource>(IEnumerable<TSource>) atau LongCount<TSource>(IEnumerable<TSource>) akses properti Length
atau Count
saat digunakan dalam operasi yang menentukan apakah objek kosong dengan penggunaan 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;
}
Tip
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 tekan pelanggaran atas aturan ini jika Anda tidak khawatir tentang dampak performa dari enumerasi item yang tidak perlu untuk 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