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
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

Count() veya LongCount() yöntemi kullanılmış olup, Any() yönteminin daha verimli olacağı bir durum söz konusudur.

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

İhlalleri düzeltme

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

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

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 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 noneolarak ayarlayın.

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

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

Ayrıca bkz.