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
Hataya neden olan veya bozulmayan düzeltme Hataya neden olmayan
.NET 9'da varsayılan olarak etkin Öneri olarak

Neden

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

Kural açıklaması

Bu kural, nesnenin herhangi bir öğe içerip içermediğini ve LongCount<TSource>(IEnumerable<TSource>) nesnenin Count daha verimli IsEmpty bir özelliğe sahip olup olmadığını belirlemek için kullanıldığında ve Length özelliklerine veya Count<TSource>(IEnumerable<TSource>) 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 Count<TSource>(IEnumerable<TSource>) LongCount<TSource>(IEnumerable<TSource>) Length özellik erişimi kullanımıyla boş olup olmadığını belirleyen bir işlemde kullanıldığında veya yöntemi çağrısını IsEmpty veya veya Count özellik erişimini 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+ tuşuna (nokta) 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 none olarak ayarlayın.

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

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

Ayrıca bkz.