CA1820 : Vérifiez la présence de chaînes vides par la longueur de chaîneCA1820: Test for empty strings using string length

TypeNameTypeName TestForEmptyStringsUsingStringLengthTestForEmptyStringsUsingStringLength
CheckIdCheckId CA1820CA1820
CategoryCategory Microsoft.PerformanceMicrosoft.Performance
Modification avec ruptureBreaking Change Sans ruptureNon-breaking

CauseCause

Une chaîne est comparée à la chaîne vide à l’aide de System.Object.Equals.A string is compared to the empty string by using System.Object.Equals.

Description de la règleRule Description

Comparer des chaînes à l’aide de la System.String.Length propriété ou le System.String.IsNullOrEmpty méthode est nettement plus rapide que l’utilisation de Equals.Comparing strings using the System.String.Length property or the System.String.IsNullOrEmpty method is significantly faster than using Equals. C’est parce que Equals exécute des instructions MSIL beaucoup plus que IsNullOrEmpty ou le nombre d’instructions exécutées pour récupérer le Length propriété valeur et la comparer à zéro.This is because Equals executes significantly more MSIL instructions than either IsNullOrEmpty or the number of instructions executed to retrieve the Length property value and compare it to zero.

Vous devez être conscient que Equals et Length == 0 se comportent différemment pour les chaînes null.You should be aware that Equals and Length == 0 behave differently for null strings. Si vous essayez d’obtenir la valeur de la Length propriété sur une chaîne null, le common language runtime lève une System.NullReferenceException.If you try to get the value of the Length property on a null string, the common language runtime throws a System.NullReferenceException. Si vous effectuez une comparaison entre une chaîne null et une chaîne vide, le common language runtime ne lève pas d’exception ; la comparaison retourne false.If you perform a comparison between a null string and the empty string, the common language runtime does not throw an exception; the comparison returns false. Test de la valeur null n’affecte pas considérablement les performances relatives de ces deux approches.Testing for null does not significantly affect the relative performance of these two approaches. Lorsque vous ciblez .NET Framework 2.0.NET Framework 2.0, utilisez le IsNullOrEmpty (méthode).When targeting .NET Framework 2.0.NET Framework 2.0, use the IsNullOrEmpty method. Sinon, utilisez le Length == comparaison chaque fois que possible.Otherwise, use the Length == comparison whenever possible.

Comment corriger les violationsHow to Fix Violations

Pour corriger une violation de cette règle, modifiez la comparaison à utiliser le Length propriété et test pour la chaîne de valeur null.To fix a violation of this rule, change the comparison to use the Length property and test for the null string. Si le ciblage .NET Framework 2.0.NET Framework 2.0, utilisez le IsNullOrEmpty (méthode).If targeting .NET Framework 2.0.NET Framework 2.0, use the IsNullOrEmpty method.

Quand supprimer les avertissementsWhen to Suppress Warnings

Il est possible de supprimer un avertissement de cette règle si les performances ne sont pas un problème.It is safe to suppress a warning from this rule if performance is not an issue.

ExempleExample

L’exemple suivant illustre les différentes techniques utilisées pour rechercher une chaîne vide.The following example illustrates the different techniques that are used to look for an empty string.

using System;

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