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ée par défaut dans .NET 9 | 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.");
}
}
}