Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
| 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örhető |
| Alapértelmezés szerint engedélyezve a .NET 10-ben | Nem |
| Alkalmazandó nyelvek | C# és Visual Basic |
Ok
Egy sztringet egy üres sztringhez hasonlítunk össze Object.Equals használatával.
Szabály leírása
A String.Length tulajdonság vagy a String.IsNullOrEmpty metódus használatával történő sztringösszehasonlítás gyorsabb, mint a Equals használata. 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 a Equals és a <string>.Length == 0 eltérően viselkednek. Ha megpróbálja lekérni a Length tulajdonság értékét egy null értékű sztringen, a közös nyelvi futtatókörnyezet egy System.NullReferenceException-t dob. 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. Amikor a 2.0-s vagy újabb .NET-keretrendszert célozza meg, használja a IsNullOrEmpty metódust. 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 figyelmen kívül lehet hagyni a szabály által generált figyelmeztetést.
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 karakterláncok 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.");
}
}
}