CA1829: Enumerable.Count yöntemi yerine Length/Count özelliğini kullanın
Özellik | Değer |
---|---|
Kural Kimliği | CA1829 |
Başlık | Enumerable.Count metodu yerine Length/Count özelliğini kullan |
Kategori | Performans |
Hataya neden olan veya bozulmayan düzeltme | Hataya neden olmayan |
.NET 9'da varsayılan olarak etkin | Öneri olarak |
Neden
Count LINQ yöntemi eşdeğer, daha verimli Length
veya Count
özelliği destekleyen bir tür üzerinde kullanılmıştır.
Kural açıklaması
Bu kural, LINQ yöntemi çağrılarını Count eşdeğer, ancak aynı verileri getirmek için daha verimli Length
veya Count
özellik içeren tür koleksiyonlarına bayrak ekler. Length
veya Count
özelliği koleksiyonu numaralandırmaz, bu nedenle daha verimlidir.
Bu kural, aşağıdaki koleksiyon türlerindeki çağrıları özelliğiyle Length
işaretlerCount:
Bu kural, aşağıdaki koleksiyon türlerindeki çağrıları özelliğiyle işaretler Count Count
:
- System.Collections.ICollection
- System.Collections.Generic.ICollection<T>
- System.Collections.Generic.IReadOnlyCollection<T>
Çözümlenen koleksiyon türleri gelecekte daha fazla vakayı kapsayacak şekilde uzatılabilir.
İhlalleri düzeltme
Bir ihlali düzeltmek için yöntem çağrısını Count veya Count
özellik erişiminin Length
kullanımıyla 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.Generic;
using System.Linq;
class C
{
public int GetCount(int[] array)
=> array.Count();
public int GetCount(ICollection<int> collection)
=> collection.Count();
}
using System.Collections.Generic;
class C
{
public int GetCount(int[] array)
=> array.Length;
public int GetCount(ICollection<int> collection)
=> collection.Count;
}
İ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. Sunulan seçenekler listesinden Kullanılabilir olduğunda Count() yerine Uzunluk/Sayı özelliğini kullan'ı seçin.
Uyarıların ne zaman bastırılması gerekiyor?
Gereksiz toplama numaralandırmasından sayıyı hesaplamak için performans etkisi konusunda endişeniz yoksa, bu kuralın ihlalini bastırmak 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 CA1829
// The code that's violating the rule is on this line.
#pragma warning restore CA1829
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.CA1829.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.
İlgili kurallar
- CA1826: Linq Enumerable yöntemi yerine özelliği kullanın
- CA1827: Herhangi biri kullanılabildiğinde Count/LongCount kullanmayın
- CA1828: AnyAsync kullanılabildiğinde CountAsync/LongCountAsync kullanmayın