CA1820: Dize uzunluğunu kullanarak boş stringler için kontrol edin

Özellik Değer
Kural Kimliği CA1820
Başlık Dize uzunluğunu kullanarak boş dizeleri test edin
Kategori Performans
Düzeltme bozucu veya bozucu olmayan bir etkisi olabilir Kaydırmaz
.NET 10'da varsayılan olarak etkin Hayır
Geçerli diller C# ve Visual Basic

Neden

Bir dize, Object.Equals kullanılarak boş bir dizeyle karşılaştırılır.

Kural açıklaması

String.Length özelliğini veya String.IsNullOrEmpty yöntemini kullanarak dizeleri karşılaştırmak, Equals kullanmaktan daha hızlıdır. Bunun nedeni, Equals'ün hem IsNullOrEmpty'den hem de Length özelliği değerini almak ve sıfırla karşılaştırmak için yürütülen yönergelerin sayısından önemli ölçüde daha fazla CIL yönergesi yürütmesidir.

Null dizeler için Equals ve <string>.Length == 0 farklı davranır. Null bir dizgede Length özelliğinin değerini almaya çalışırsanız, ortak dil çalışma zamanı bir System.NullReferenceException oluşturur. Null dize ile boş dize arasında bir karşılaştırma gerçekleştirirseniz, Ortak Dil Çalışma Zamanı bir özel durum oluşturmaz ve false döndürür. Null testi, bu iki yaklaşımın göreli performansını önemli ölçüde etkilemez. .NET Framework 2.0 veya sonraki bir sürümü hedeflerken IsNullOrEmpty yöntemini kullanın. Aksi takdirde mümkün olduğunda == 0 karşılaştırmasını Length kullanın.

İhlalleri düzeltme

Bu kuralın ihlalini düzeltmek için karşılaştırmayı IsNullOrEmpty yöntemini kullanacak şekilde değiştirin.

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

Performans sorun değilse, bu kuraldan gelen bir uyarıyı engellemek 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 CA1820
// The code that's violating the rule is on this line.
#pragma warning restore CA1820

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

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

Örnek

Farklı teknikler kullanarak boş bir dize aramanın gösterildiği aşağıdaki örnek.

public class StringTester
{
    string s1 = "test";

    public void EqualsTest()
    {
        // Violates rule: TestForEmptyStringsUsingStringLength.
        if (s1 == "")
        {
            Console.WriteLine("s1 equals empty string.");
        }
    }

    // Use for .NET Framework 1.0 and 1.1.
    public void LengthTest()
    {
        // Satisfies rule: TestForEmptyStringsUsingStringLength.
        if (s1 != null && s1.Length == 0)
        {
            Console.WriteLine("s1.Length == 0.");
        }
    }

    // Use for .NET Framework 2.0.
    public void NullOrEmptyTest()
    {
        // Satisfies rule: TestForEmptyStringsUsingStringLength.
        if (!String.IsNullOrEmpty(s1))
        {
            Console.WriteLine("s1 != null and s1.Length != 0.");
        }
    }
}