Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
| Ö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 10'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 01 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 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 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ı Count veya veya IsEmpty ö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 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 noneolarak 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