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 | CA1826 |
| Başlık | Linq Numaralandırma metodu yerine property kullan |
| 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
Enumerable LINQ yöntemi, eşdeğer, daha verimli bir özelliği destekleyen bir tür üzerinde kullanılmıştır.
Kural açıklaması
Bu kural, LINQ yönteminin aynı verileri getirmek için eşdeğer ancak daha verimli özelliklere sahip tür koleksiyonlarını çağırdığını gösterir Enumerable .
Bu kural, IReadOnlyList<T> uygulayıp IList<T> uygulamayan koleksiyon türlerini analiz eder.
Bu kural, bu koleksiyon türlerindeki aşağıdaki yöntemlere yapılan çağrıları işaretler.
- System.Linq.Enumerable.Count
- System.Linq.Enumerable.First
- System.Linq.Enumerable.FirstOrDefault
- System.Linq.Enumerable.Last
- System.Linq.Enumerable.LastOrDefault
Çözümlenen koleksiyon türleri ve yöntemleri gelecekte daha fazla vakayı kapsayacak şekilde uzatılabilir.
İhlalleri düzeltme
Bir ihlali düzeltmek için yöntem çağrısını Enumerable ö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;
using System.Collections.Generic;
using System.Linq;
class C
{
public void M(IReadOnlyList<string> list)
{
Console.Write(list.First());
Console.Write(list.Last());
Console.Write(list.Count());
}
}
using System;
using System.Collections.Generic;
class C
{
public void M(IReadOnlyList<string> list)
{
Console.Write(list[0]);
Console.Write(list[list.Count - 1]);
Console.Write(list.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+. (nokta) tuşuna basın. Sunulan seçenekler listesinden Dizin oluşturucu kullan'ı seçin.
Uyarıların ne zaman bastırılması gerekiyor?
Belirli Enumerable yöntem çağrılarının 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 CA1826
// The code that's violating the rule is on this line.
#pragma warning restore CA1826
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.CA1826.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.
Kod çözümleme için konfigüre et
Bu kuralın kod tabanınızın hangi bölümlerinde çalıştırılacaklarını yapılandırmak için aşağıdaki seçeneği kullanın.
FirstOrDefault ve LastOrDefault yöntemlerini dışla
Bu kuralı Enumerable.FirstOrDefault ve Enumerable.LastOrDefault yöntemlerini analizden dışlayacak şekilde yapılandırabilirsiniz. Okunabilirlik önemliyse bu yöntemleri dışlayabilirsiniz, çünkü bunları değiştirmek için yazacağınız kod kolayca okunamaz. Bu yöntemleri dışlamak için projenizdeki bir .editorconfig dosyasına aşağıdaki anahtar-değer çiftini ekleyin:
dotnet_code_quality.CA1826.exclude_ordefault_methods = true
İ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