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