CA1836: Kullanılabilir olduğunda IsEmpty yerine Count tercih edin

Özellik Değer
Kural Kimliği CA1836
Başlık Kullanılabilir olduğunda Count yerine IsEmpty tercih edin
Kategori Performans
Düzeltme bozucu ya da bozmayan olabilir Kesintisiz
.NET 10'da varsayılan olarak etkin Öneri olarak
Geçerli diller C# ve Visual Basic

Neden

Count veya Length özelliği ya da Count<TSource>(IEnumerable<TSource>) uzantı yöntemi, değeri 0 veya 1 ile karşılaştırarak nesnenin herhangi bir öğe içerip içermediğini belirlemek için kullanılmıştır, ancak nesnenin bunun yerine kullanılabilecek daha verimli bir IsEmpty özelliği bulunmaktadır.

Kural açıklaması

Bu kural, nesnenin herhangi bir öğe içerip içermediğini ve Count nesnenin Length daha verimli Count<TSource>(IEnumerable<TSource>) bir özelliğe sahip olup olmadığını belirlemek için kullanıldığında ve LongCount<TSource>(IEnumerable<TSource>) özelliklerine veya IsEmpty LINQ yöntemlerine yapılan çağrıları bayrakla işaretler.

Bu kuralın analizi başlangıçta CA1827, CA1828 ve CA1829 gibi benzer kurallarla çakışıyor; bu tür kuralların çözümleyicileri, çakışma durumunda en iyi tanılamayı raporlamak için CA1836 ile birleştirildi.

İhlalleri düzeltme

Bir ihlali düzeltmek için, nesnenin boş olup olmadığını belirleyen bir işlemde kullanılıyorsa, Count<TSource>(IEnumerable<TSource>) veya LongCount<TSource>(IEnumerable<TSource>) yöntem çağrısını ya da Length veya Count özellik erişimini IsEmpty özellik erişimiyle değiştirin. Örneğin, aşağıdaki iki kod parçacığı kuralın ihlalini ve nasıl düzeltileceğini gösterir:

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;
}

İpucu

Visual Studio'da bu kural için bir kod düzeltmesi kullanılabilir. Bunu kullanmak için imleci ihlalin üzerine getirin ve Ctrl+. (nokta) tuşuna basın. Nesnenin sunulan seçenekler listesinden herhangi bir öğe içerip içermediğini belirlemek için 'Say' yerine 'IsEmpty'yi tercih et'i seçin.

CA1836 için kod düzeltmesi - Nesnenin herhangi bir öğe içerip içermediğini belirlemek için 'Count' yerine 'IsEmpty'yi tercih edin

Uyarıların ne zaman bastırılması gerekiyor?

Sayıyı hesaplamak için gereksiz öğe numaralandırmasından kaynaklanan performans etkisi konusunda endişeniz yoksa, bu kuralın ihlalini gizlemeniz güvenlidir.

Uyarıyı gizleme

Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.

#pragma warning disable CA1836
// The code that's violating the rule is on this line.
#pragma warning restore CA1836

Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini noneolarak ayarlayın.

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

Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.

Ayrıca bkz.