178 votes

Différence entre IsNullOrEmpty et IsNullOrWhiteSpace en C#

Quelles sont les différences entre ces commandes en C# ?

string text= "  ";
1-string.IsNullOrEmpty(text.Trim())

2-string.IsNullOrWhiteSpace(text)

237voto

fionbio Points 1995

IsNullOrWhiteSpace est une méthode pratique qui est similaire à la méthode code suivant, sauf qu'elle offre des performances supérieures :

return String.IsNullOrEmpty(value) || value.Trim().Length == 0;

Les caractères d'espace blanc sont définis par la norme Unicode. Le site IsNullOrWhiteSpace interprète tout caractère qui renvoie un vrai lorsqu'il est transmis à la méthode Char.IsWhiteSpace comme un caractère d'espace blanc.

102voto

fubo Points 647

Réponse courte :

Dans l'usage courant, l'espace " " , Tab "\t" et le saut de ligne "\n" sont la différence :

string.IsNullOrWhiteSpace("\t"); //true
string.IsNullOrEmpty("\t"); //false

string.IsNullOrWhiteSpace(" "); //true
string.IsNullOrEmpty(" "); //false

string.IsNullOrWhiteSpace("\n"); //true
string.IsNullOrEmpty("\n"); //false

https://dotnetfiddle.net/4hkpKM

Voir aussi cette réponse à propos de : caractères d'espacement


Longue réponse :

Il existe également quelques autres caractères d'espace blanc, que vous n'avez probablement jamais utilisés auparavant.

  • Membres de la catégorie UnicodeCategory.SpaceSeparator, qui comprend les caractères SPACE (U+0020), NO-BREAK SPACE (U+00A0), OGHAM SPACE MARK (U+1680), EN QUAD (U+2000), EM QUAD (U+2001), EN SPACE (U+2002), EM SPACE (U+2003), THREE-PER-EM SPACE (U+2004), FOUR-PER-EM SPACE (U+2005), SIX-PER-EM SPACE (U+2006), FIGURE SPACE (U+2007), PUNCTUATION SPACE (U+2008), THIN SPACE (U+2009), HAIR SPACE (U+200A), NARROW NO-BREAK SPACE (U+202F), MEDIUM MATHEMATICAL SPACE (U+205F), and IDEOGRAPHIC SPACE (U+3000) .
  • Les membres de la catégorie UnicodeCategory.LineSeparator, qui se compose uniquement de l'attribut LINE SEPARATOR character (U+2028) .
  • Membres de la catégorie UnicodeCategory.ParagraphSeparator, qui se compose uniquement de l'élément PARAGRAPH SEPARATOR character (U+2029) .
  • Les personnages CHARACTER TABULATION (U+0009), LINE FEED (U+000A), LINE TABULATION (U+000B), FORM FEED (U+000C), CARRIAGE RETURN (U+000D), and NEXT LINE (U+0085) .

https://docs.microsoft.com/en-us/dotnet/api/system.char.iswhitespace

58voto

TGH Points 15623

La première méthode vérifie si une chaîne de caractères est nulle ou vide. Dans votre exemple, vous pouvez risquer une référence nulle puisque vous ne vérifiez pas si elle est nulle avant de la couper.

1- string.IsNullOrEmpty(text.Trim())

La deuxième méthode vérifie si une chaîne de caractères est nulle ou si elle contient un nombre arbitraire d'espaces (y compris une chaîne vide).

2- string .IsNullOrWhiteSpace(text)

La méthode IsNullOrWhiteSpace couvre IsNullOrEmpty mais il renvoie également true si la chaîne ne contient que des caractères d'espace blanc.

Dans votre exemple concret, vous devriez utiliser 2) car vous courez le risque d'une exception de référence nulle dans l'approche 1) puisque vous appelez trim sur une chaîne qui peut être nulle.

11voto

JHubbard80 Points 954

String.IsNullOrEmpty(string value) renvoie à true si la chaîne est nulle ou vide. Pour référence, une chaîne de caractères vide est représentée par "" (deux caractères guillemets doubles).

String.IsNullOrWhitespace(string value) renvoie à true si la chaîne est nulle, vide ou ne contient que des caractères d'espacement tels qu'un espace ou une tabulation.

Pour savoir quels caractères sont considérés comme des espaces, consultez ce lien : http://msdn.microsoft.com/en-us/library/t809ektx.aspx

11voto

Ľuboš Čurgó Points 284

C'est mise en œuvre des méthodes après la décompilation.

    public static bool IsNullOrEmpty(String value) 
    {
        return (value == null || value.Length == 0); 
    }

    public static bool IsNullOrWhiteSpace(String value) 
    {
        if (value == null) return true; 

        for(int i = 0; i < value.Length; i++) { 
            if(!Char.IsWhiteSpace(value[i])) return false; 
        }

        return true;
    }

Il est donc évident que IsNullOrWhiteSpace vérifie également si la valeur transmise contient des espaces blancs.

Les espaces blancs désignent : https://msdn.microsoft.com/en-us/library/system.char.iswhitespace(v=vs.110).aspx

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X