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 | CA1827 |
| Başlık | Any() kullanılabildiğinde Count()/LongCount() kullanmayın |
| 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 LongCount() yöntemi kullanılmış olup, Any() yönteminin daha verimli olacağı bir durum söz konusudur.
Kural açıklaması
Bu kural, koleksiyonun en az bir öğesi olup olmadığını denetlemek için kullanılan Count() ve LongCount() LINQ yöntemi çağrılarına bayrak ekler. Bu yöntemler, sayımı hesaplamak için koleksiyonun tamamını numaralandırır. Koleksiyonun numaralandırılmasını önlediğinden Any() yöntemiyle aynı denetim daha hızlıdır.
Not
Bu kural CA1860'a benzer: 'Enumerable.Any()' uzantı yöntemini kullanmaktan kaçının. Ancak bu kural özelliğinin Countkullanılmasını önerirken, bu kural Linq Count()uzantısı yöntemi için geçerlidir.
İhlalleri düzeltme
Bir ihlali düzeltmek için Count yöntemi çağrısını Any yöntemiyle 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 string M1(IEnumerable<string> list)
=> list.Count() != 0 ? "Not empty" : "Empty";
public string M2(IEnumerable<string> list)
=> list.LongCount() > 0 ? "Not empty" : "Empty";
}
using System.Collections.Generic;
using System.Linq;
class C
{
public string M1(IEnumerable<string> list)
=> list.Any() ? "Not empty" : "Empty";
public string M2(IEnumerable<string> list)
=> list.Any() ? "Not empty" : "Empty";
}
İ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. Any() kullanılabileceğinde Count() veya LongCount() kullanmamayı seç sunulan seçenekler listesinden.
Uyarıların ne zaman bastırılması gerekiyor?
Performans üzerinde gereksiz toplama numaralandırmasından kaynaklanan etki 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 CA1827
// The code that's violating the rule is on this line.
#pragma warning restore CA1827
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.CA1827.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
- CA1828: AnyAsync kullanılabildiğinde CountAsync/LongCountAsync kullanmayın
- CA1829: Enumerable.Count() yöntemi yerine Length/Count özelliğini kullanın
- CA1860: 'Enumerable.Any()' uzantı yöntemini kullanmaktan kaçının