CA1820: Testa för tomma strängar med stränglängd
Property | Värde |
---|---|
Regel-ID | CA1820 |
Title | Testa för tomma strängar med stränglängd |
Kategori | Prestanda |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Nej |
Orsak
En sträng jämförs med den tomma strängen med hjälp Object.Equalsav .
Regelbeskrivning
Det går snabbare att jämföra strängar med egenskapen String.Length eller String.IsNullOrEmpty metoden än att använda Equals. Detta beror på att Equals kör betydligt fler CIL-instruktioner än någon IsNullOrEmpty av eller antalet instruktioner som körs för att hämta Length egenskapsvärdet och jämföra det med noll.
För null-strängar Equals och <string>.Length == 0
beter sig annorlunda. Om du försöker hämta värdet Length för egenskapen på en null-sträng genererar den vanliga språkkörningen en System.NullReferenceException. Om du gör en jämförelse mellan en null-sträng och den tomma strängen utlöser inte common language runtime ett undantag och returnerar false
. Testning för null påverkar inte den relativa prestandan för dessa två metoder avsevärt. Använd metoden när du riktar in dig på .NET Framework 2.0 eller senare IsNullOrEmpty . Annars använder du jämförelsen Length == 0 när det är möjligt.
Så här åtgärdar du överträdelser
Om du vill åtgärda ett brott mot den här regeln ändrar du jämförelsen så att metoden IsNullOrEmpty används.
När du ska ignorera varningar
Det är säkert att ignorera en varning från den här regeln om prestanda inte är ett problem.
Ignorera en varning
Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.
#pragma warning disable CA1820
// The code that's violating the rule is on this line.
#pragma warning restore CA1820
Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none
i konfigurationsfilen.
[*.{cs,vb}]
dotnet_diagnostic.CA1820.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.
Exempel
I följande exempel visas de olika tekniker som används för att leta efter en tom sträng.
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.");
}
}
}