CA1820: Testen op lege tekenreeksen met tekenreekslengte
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA1820 |
Titel | Testen op lege tekenreeksen met tekenreekslengte |
Categorie | Prestaties |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld in .NET 9 | Nee |
Oorzaak
Een tekenreeks wordt vergeleken met de lege tekenreeks met behulp van Object.Equals.
Beschrijving van regel
Het vergelijken van tekenreeksen met behulp van de String.Length eigenschap of de String.IsNullOrEmpty methode is sneller dan het gebruik van Equals. Dit komt doordat Equals er aanzienlijk meer CIL-instructies worden uitgevoerd dan IsNullOrEmpty of het aantal instructies dat is uitgevoerd om de Length eigenschapswaarde op te halen en deze te vergelijken met nul.
Voor null-tekenreeksen Equals en <string>.Length == 0
zich anders gedragen. Als u de waarde van de Length eigenschap op een null-tekenreeks probeert op te halen, genereert de algemene taalruntime een System.NullReferenceException. Als u een vergelijking uitvoert tussen een null-tekenreeks en de lege tekenreeks, genereert de algemene taalruntime geen uitzondering en retourneert false
deze. Testen op null heeft geen invloed op de relatieve prestaties van deze twee benaderingen. Gebruik de IsNullOrEmpty methode wanneer u zich richt op .NET Framework 2.0 of hoger. Gebruik anders waar mogelijk de Length vergelijking == 0.
Schendingen oplossen
Als u een schending van deze regel wilt oplossen, wijzigt u de vergelijking om de IsNullOrEmpty methode te gebruiken.
Wanneer waarschuwingen onderdrukken
Het is veilig om een waarschuwing van deze regel te onderdrukken als de prestaties geen probleem zijn.
Een waarschuwing onderdrukken
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.
#pragma warning disable CA1820
// The code that's violating the rule is on this line.
#pragma warning restore CA1820
Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none
ervan in op het configuratiebestand.
[*.{cs,vb}]
dotnet_diagnostic.CA1820.severity = none
Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.
Opmerking
In het volgende voorbeeld ziet u de verschillende technieken die worden gebruikt om te zoeken naar een lege tekenreeks.
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.");
}
}
}