CA1826: Linq Enumerable yöntemi yerine özelliği kullanın
Özellik | Değer |
---|---|
Kural Kimliği | CA1826 |
Başlık | Linq Numaralandırma metodu yerine property kullan |
Kategori | Performans |
Hataya neden olan veya bozulmayan düzeltme | Hataya neden olmayan |
.NET 9'da varsayılan olarak etkin | Öneri olarak |
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 uygulayan ancak olmayan IReadOnlyList<T> IList<T>koleksiyon türlerini analiz eder.
Bu kural, bu koleksiyon türlerinde aşağıdaki yöntemlere çağrıları bayrakla 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+ tuşuna (nokta) 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 none
olarak ayarlayın.
[*.{cs,vb}]
dotnet_diagnostic.CA1826.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.
Çözümlemek için kod yapılandırma
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ı ve Enumerable.LastOrDefault yöntemlerini analizden dışlamak Enumerable.FirstOrDefault için 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: Herhangi biri kullanılabildiğinde 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