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 1
0
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.
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.
İlgili kurallar
- CA1827: Herhangi biri kullanılabildiğinde Count/LongCount kullanmayın
- CA1828: AnyAsync kullanılabildiğinde CountAsync/LongCountAsync kullanmayın
- CA1829: Enumerable.Count yöntemi yerine Length/Count özelliğini kullanın