CA1860: 'Enumerable.Any()' uzantı yöntemini kullanmaktan kaçının

Özellik Değer
Kural Kimliği CA1860
Başlık 'Enumerable.Any()' uzantı yöntemini kullanmaktan kaçının
Kategori Performans
Hataya neden olan veya bozulmayan düzeltme Hataya neden olmayan
.NET 8'de varsayılan olarak etkin Öneri olarak

Neden

Enumerable.Any, Countveya IsEmptyözelliği olan bir Lengthtür üzerinde çağrılır.

Kural açıklaması

Bir koleksiyon türünün herhangi bir öğeye sahip olup olmadığını belirlemek için , Countveya IsEmpty (mümkünse) özelliklerini kullanmak Lengthyöntemi çağırmaktan Enumerable.Any daha verimli ve daha nettir.

Any(), bir uzantı yöntemidir ve dil tümleşik sorgusunu (LINQ) kullanır. Koleksiyonun kendi özelliklerine güvenmek daha verimlidir ve amacını da açıklar.

Dekont

Bu kural CA1827'ye benzer: Any() kullanılabilirken Count()/LongCount() kullanmayın. Ancak bu kural Linq Count()yöntemine uygulanırken, bu kural özelliğinin Countkullanılmasını önerir.

İhlalleri düzeltme

Any() çağrısını koleksiyonun Length, Countveya IsEmpty özelliğine yapılan bir çağrıyla değiştirin.

Örnek

Aşağıdaki kod parçacığı CA1860 ihlalini gösterir:

bool HasElements(string[] strings)
{
    return strings.Any();
}
Function HasElements(strings As String()) As Boolean
    Return strings.Any()
End Function

Aşağıdaki kod parçacığı ihlali düzeltir:

bool HasElements(string[] strings)
{
    return strings.Length > 0;
}
Function HasElements(strings As String()) As Boolean
    Return strings.Length > 0
End Function

Uyarıların ne zaman bastırılması gerekiyor?

Performansla ilgili bir sorun yoksa bu uyarıyı 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 CA1860
// The code that's violating the rule is on this line.
#pragma warning restore CA1860

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.CA1860.severity = none

Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.