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 |
| 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.
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: Any kullanılabilecekken 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