CA1820: Dize uzunluğunu kullanarak boş dizeler için sınayın

Özellik Değer
Kural Kimliği CA1820
Başlık Dize uzunluğunu kullanarak boş dizeleri test edin
Kategori Performans
Hataya neden olan veya bozulmayan düzeltme Hataya neden olmayan
.NET 8'de varsayılan olarak etkin Hayır

Neden

Bir dize, kullanılarak Object.Equalsboş dizeyle karşılaştırılır.

Kural açıklaması

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

Null dizeler Equals için ve <string>.Length == 0 farklı davran. Null dizede özelliğinin Length değerini almaya çalışırsanız, ortak dil çalışma zamanı bir System.NullReferenceExceptionoluş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 döndürür false. 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 yöntemini kullanın IsNullOrEmpty . 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ı yöntemini kullanacak şekilde IsNullOrEmpty 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

Aşağıdaki örnekte, boş bir dize aramak için kullanılan farklı teknikler gösterilmektedir.

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.");
        }
    }
}