CA1820: Üres sztringek tesztelése karakterlánchossz használatával
Tulajdonság | Érték |
---|---|
Szabályazonosító | CA1820 |
Cím | Üres sztringek tesztelése karakterlánchossz használatával |
Kategória | Teljesítmény |
A javítás kompatibilitástörő vagy nem törik | Nem törés |
Alapértelmezés szerint engedélyezve a .NET 8-ban | Nem |
Ok
A sztringeket az üres sztringhez hasonlítjuk össze a használatával Object.Equals.
Szabály leírása
A tulajdonságot vagy a String.IsNullOrEmpty metódust használó String.Length sztringek összehasonlítása gyorsabb, mint a használataEquals. Ennek az az oka, hogy Equals lényegesen több CIL-utasítást hajt végre, mint bármelyik IsNullOrEmpty , vagy a végrehajtott utasítások száma a Length tulajdonságérték lekéréséhez és nullához való összehasonlításához.
Null sztringek esetén, Equals és <string>.Length == 0
viselkedjen másképp. Ha null sztringre próbálja lekérni a Length tulajdonság értékét, a közös nyelvi futtatókörnyezet egy System.NullReferenceException. Ha egy null sztring és az üres sztring összehasonlítását hajtja végre, a közös nyelvi futtatókörnyezet nem ad kivételt, és visszaadja a függvényt false
. A null érték tesztelése nem befolyásolja jelentősen e két megközelítés relatív teljesítményét. A 2.0-s vagy újabb .NET-keretrendszer célzáskor használja a metódustIsNullOrEmpty. Ellenkező esetben használja a Length == 0 összehasonlítást, amikor csak lehetséges.
Szabálysértések kijavítása
A szabály megsértésének kijavításához módosítsa az összehasonlítást a IsNullOrEmpty metódus használatára.
Mikor kell letiltani a figyelmeztetéseket?
Ha a teljesítmény nem probléma, nyugodtan el lehet tiltani a szabály figyelmeztetését.
Figyelmeztetés mellőzése
Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.
#pragma warning disable CA1820
// The code that's violating the rule is on this line.
#pragma warning restore CA1820
Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none
a konfigurációs fájlban.
[*.{cs,vb}]
dotnet_diagnostic.CA1820.severity = none
További információ: Kódelemzési figyelmeztetések letiltása.
Példa
Az alábbi példa az üres sztringek keresésére használt különböző technikákat mutatja be.
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.");
}
}
}
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: