Aracılığıyla paylaş


CA1827: Any() kullanılabilirken Count()/LongCount() kullanmayın

Özellik Değer
Kural Kimliği CA1827
Başlık Any() kullanılabildiğinde Count()/LongCount() kullanmayın
Kategori Performans
Hataya neden olan veya bozulmayan düzeltme Hataya neden olmayan
.NET 8'de varsayılan olarak etkin Öneri olarak

Neden

Any() yönteminin daha verimli olacağı Count() veya LongCount() yöntemi kullanılmıştır.

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 Count kullanılmasını önerirken, bu kural Linq Count() uzantısı yöntemi için geçerlidir.

İhlalleri düzeltme

Bir ihlali düzeltmek için veya LongCount yöntemi çağrısını Count 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+ tuşuna (nokta) basın. Sunulan seçenekler listesinden Any() kullanılabildiğinde Count() veya LongCount() kullanma'yı seçin.

CA1827 için kod düzeltmesi - Any() kullanılabildiğinde Count() veya LongCount() kullanmayın

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

Gereksiz toplama numaralandırmasından sayıyı hesaplamak için performans etkisi 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 none olarak ayarlayın.

[*.{cs,vb}]
dotnet_diagnostic.CA1827.severity = none

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

Ayrıca bkz.