Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
| Proprietà | valore |
|---|---|
| ID regola | CA1820 |
| Title | Testare le stringhe vuote usando la lunghezza della stringa |
| Categoria | Prestazioni |
| La correzione causa un'interruzione o meno | Non causa un'interruzione |
| Abilitato per impostazione predefinita in .NET 10 | No |
| Linguaggi applicabili | C# e Visual Basic |
Causa
Una stringa viene confrontata con la stringa vuota usando Object.Equals.
Descrizione regola
Il confronto di stringhe tramite la proprietà String.Length o il metodo String.IsNullOrEmpty è più veloce rispetto all'uso di Equals. Ciò è dovuto al fatto che Equals esegue istruzioni CIL significativamente maggiori rispetto IsNullOrEmpty a o al numero di istruzioni eseguite per recuperare il valore della Length proprietà e confrontarlo con zero.
Per le stringhe nulle, Equals e <string>.Length == 0 si comportano in modo diverso. Se si tenta di ottenere il valore della proprietà Length su una stringa nulla, il Common Language Runtime genera un'eccezione System.NullReferenceException. Se si esegue un confronto tra una stringa Null e la stringa vuota, Common Language Runtime non genera un'eccezione e restituisce false. Il test per Null non influisce significativamente sulle prestazioni relative di questi due approcci. Quando la destinazione è .NET Framework 2.0 o versione successiva, usare il IsNullOrEmpty metodo . In caso contrario, usare il confronto Length == 0 quando possibile.
Come correggere le violazioni
Per correggere una violazione di questa regola, modificare il confronto per usare il IsNullOrEmpty metodo .
Quando eliminare gli avvisi
Se le prestazioni non sono un problema, è possibile eliminare un avviso da questa regola.
Eliminare un avviso
Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.
#pragma warning disable CA1820
// The code that's violating the rule is on this line.
#pragma warning restore CA1820
Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità none su nel file di configurazione.
[*.{cs,vb}]
dotnet_diagnostic.CA1820.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.
Esempio
Nell'esempio seguente vengono illustrate le diverse tecniche usate per cercare una stringa vuota.
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.");
}
}
}