CA1820: Zbadaj pod kątem ciągów pustych przy użyciu długości ciągu

Właściwości Wartość
Identyfikator reguły CA1820
Tytuł Testuj obecność pustych ciągów przy użyciu długości ciągu
Kategoria Wydajność
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 8 Nie.

Przyczyna

Ciąg jest porównywany z pustym ciągiem przy użyciu polecenia Object.Equals.

Opis reguły

Porównywanie ciągów przy użyciu String.Length właściwości lub String.IsNullOrEmpty metody jest szybsze niż użycie metody Equals. Jest to spowodowane tym, że Equals wykonuje znacznie więcej instrukcji CIL niż IsNullOrEmpty lub liczba wykonanych instrukcji w celu pobrania Length wartości właściwości i porównaj ją z zerem.

W przypadku ciągów Equals o wartości null i <string>.Length == 0 zachowują się inaczej. Jeśli spróbujesz uzyskać wartość właściwości w ciągu o wartości Length null, środowisko uruchomieniowe języka wspólnego zgłasza błąd System.NullReferenceException. Jeśli wykonasz porównanie między ciągiem o wartości null a pustym ciągiem, środowisko uruchomieniowe języka wspólnego nie zgłasza wyjątku i zwraca wartość false. Testowanie wartości null nie wpływa znacząco na względną wydajność tych dwóch metod. W przypadku określania wartości docelowej dla programu .NET Framework 2.0 lub nowszego IsNullOrEmpty użyj metody . W przeciwnym razie użyj Length porównania == 0, jeśli to możliwe.

Jak naprawić naruszenia

Aby naprawić naruszenie tej reguły, zmień porównanie, aby użyć IsNullOrEmpty metody .

Kiedy pomijać ostrzeżenia

Można bezpiecznie pominąć ostrzeżenie z tej reguły, jeśli wydajność nie jest problemem.

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

#pragma warning disable CA1820
// The code that's violating the rule is on this line.
#pragma warning restore CA1820

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

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

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.

Przykład

Poniższy przykład ilustruje różne techniki, które są używane do wyszukiwania pustego ciągu.

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