CA1820 : Vérifiez la présence de chaînes vides par la longueur de chaîne

Propriété Value
Identificateur de la règle CA1820
Titre Vérifiez la présence de chaînes vides par la longueur de chaîne
Catégorie Performances
Le correctif est cassant ou non cassant Sans rupture
Activé par défaut dans .NET 8 Non

Cause

Une chaîne est comparée à la chaîne vide à l’aide de Object.Equals.

Description de la règle

Il est plus rapide de comparer des chaînes à l’aide de la propriété String.Length ou de la méthode String.IsNullOrEmpty qu’avec Equals. Cela est dû au fait qu’elle Equals exécute beaucoup plus d’instructions CIL que l’une ou l’autre IsNullOrEmpty des instructions exécutées pour récupérer la valeur de propriété Length et la comparer à zéro.

En ce qui concerne les chaînes null, Equals et <string>.Length == 0 se comportent différemment. Si l’on essaye d’obtenir la valeur de la propriété Length sur une chaîne null, le Common Language Runtime lève une System.NullReferenceException. Dans le cas d’une comparaison entre une chaîne null et la chaîne vide, le Common Language Runtime ne lève pas d’exception et retourne false. Le fait de tester la présence d’une valeur null ne présente pas d’incidence significative sur les performances relatives de ces deux approches. Lorsque vous ciblez .NET Framework 2.0 (ou une version ultérieure), utilisez la méthode IsNullOrEmpty. Sinon, optez pour la comparaison Length == 0 dans la mesure du possible.

Comment corriger les violations

Pour corriger une violation de cette règle, modifiez la comparaison de façon à utiliser la méthode IsNullOrEmpty.

Quand supprimer les avertissements

Vous pouvez sans risque supprimer un avertissement de cette règle ou la désactiver si les performances ne constituent pas un problème.

Supprimer un avertissement

Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.

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

Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none dans le fichier de configuration.

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

Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.

Exemple

L’exemple suivant illustre les différentes techniques utilisées pour rechercher une chaîne vide.

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