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 | CA1828 |
| Başlık | AnyAsync kullanılabildiğinde, CountAsync/LongCountAsync tercih etme. |
| 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
CountAsync veya LongCountAsync yöntemi, yöntemin AnyAsync daha verimli olacağı yerde kullanılmıştır.
Kural açıklaması
Bu kural, koleksiyonda en az bir öğe olup olmadığını kontrol etmek için kullanılan CountAsync ve LongCountAsync LINQ yöntem çağrılarını işaretler. Bu yöntem çağrıları, sayımı hesaplamak için koleksiyonun tamamının numaralanmasını gerektirir. Aynı denetim yöntemiyle AnyAsync daha hızlıdır, ancak koleksiyonu numaralandırmaktan kaçınır.
İhlalleri düzeltme
Bir ihlali düzeltmek için CountAsync yöntemi çağrısını AnyAsync 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.Linq;
using System.Threading.Tasks;
using static Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions;
class C
{
public async Task<string> M1Async(IQueryable<string> list)
=> await list.CountAsync() != 0 ? "Not empty" : "Empty";
public async Task<string> M2Async(IQueryable<string> list)
=> await list.LongCountAsync() > 0 ? "Not empty" : "Empty";
}
using System.Linq;
using System.Threading.Tasks;
using static Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions;
class C
{
public async Task<string> M1Async(IQueryable<string> list)
=> await list.AnyAsync() ? "Not empty" : "Empty";
public async Task<string> M2Async(IQueryable<string> list)
=> await list.AnyAsync() ? "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. Sunulan seçenekler listesinden AnyAsync() kullanılabiliyorken CountAsync() veya LongCountAsync() kullanmamayı seçin.
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 CA1828
// The code that's violating the rule is on this line.
#pragma warning restore CA1828
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.CA1828.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: Any kullanılabilecekken Count/LongCount kullanmayın
- CA1829: Enumerable.Count yöntemi yerine Length/Count özelliğini kullanın