Bagikan melalui


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 8 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.

Code fix for CA1836 - Prefer 'IsEmpty' over 'Count' to determine whether the object contains or not any items

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.

Baca juga