CA1820: Comprobar si las cadenas están vacías mediante la longitud de cadena

Propiedad Value
Identificador de la regla CA1820
Título Comprobar si las cadenas están vacías mediante la longitud de cadena
Categoría Rendimiento
La corrección es problemática o no problemática Poco problemático
Habilitado de forma predeterminada en .NET 8 No

Causa

Una cadena se compara con la cadena vacía mediante Object.Equals.

Descripción de la regla

La comparación de cadenas mediante la propiedad String.Length o el método String.IsNullOrEmpty es más rápido que usar Equals. Esto se debe a que Equals ejecuta significativamente más instrucciones CIL que IsNullOrEmpty o el número de instrucciones ejecutadas para recuperar el valor de la Length propiedad y compararlo con cero.

Para cadenas nulas, Equals y <string>.Length == 0 se comportan de manera diferente. Si intenta obtener el valor de la propiedad Length en una cadena nula, Common Language Runtime produce una excepción System.NullReferenceException. Si realiza una comparación entre una cadena nula y una cadena vacía, Common Language Runtime no inicia una excepción y devuelve false. La comprobación de cadenas nulas no afecta significativamente al rendimiento relativo de estos dos enfoques. Cuando el destino sea .NET Framework 2.0 o una versión posterior, use el método IsNullOrEmpty. De lo contrario, use la comparación Length == 0 siempre que sea posible.

Cómo corregir infracciones

Para corregir una infracción de esta regla, cambie la comparación para utilizar el método IsNullOrEmpty.

Cuándo suprimir las advertencias

Es seguro suprimir una advertencia de esta regla si el rendimiento no es un problema.

Supresión de una advertencia

Si solo quiere suprimir una única infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y volver a habilitar la regla.

#pragma warning disable CA1820
// The code that's violating the rule is on this line.
#pragma warning restore CA1820

Para deshabilitar la regla de un archivo, una carpeta o un proyecto, establezca su gravedad en none del archivo de configuración.

[*.{cs,vb}]
dotnet_diagnostic.CA1820.severity = none

Para obtener más información, consulte Procedimiento para suprimir advertencias de análisis de código.

Ejemplo

En el ejemplo siguiente se muestran las distintas técnicas que se usan para buscar una cadena vacía.

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.");
        }
    }
}