Différence entre IsNullOrEmpty et IsNullOrWhiteSpace en C # [dupliquer]

Cette question a déjà une réponse ici:

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

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

2-string.IsNullOrWhiteSpace(text)
84
demandé sur hims056 2013-09-10 08:18:37

8 réponses

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

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

Les espaces blancs sont définis par la norme Unicode. Le IsNullOrWhiteSpace Méthode interprète tout caractère qui renvoie un valeur de true lorsqu'elle est passée à la méthode Char.IsWhiteSpace caractère d'espace blanc.

117
répondu fionbio 2017-08-29 10:27:23

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

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

La deuxième méthode vérifie si une chaîne est nulle ou pour un nombre arbitraire d'espaces dans la chaîne (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 contient des espaces.

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

29
répondu TGH 2017-12-19 11:36:14

De l'Espace , Tab \t et newline \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'Espace

25
répondu fubo 2018-03-14 15:09:44

String.IsNullOrEmpty(string value) retourne true si la chaîne est null ou vide. Pour référence, une chaîne vide est représentée par " "(deux guillemets doubles)

String.IsNullOrWhitespace(string value) retourne true si la chaîne est nulle, vide ou ne contient que des espaces tels qu'un espace ou une tabulation.

Pour voir quels caractères comptent comme espaces, consultez ce lien: http://msdn.microsoft.com/en-us/library/t809ektx.aspx

6
répondu JHubbard80 2014-08-16 12:53:03

Si votre chaîne (dans votre cas la variable text) pourrait être nulle, cela ferait une grande différence:

1-string.IsNullOrEmpty(text.Trim()) -- >EXCEPTION depuis que vous appelez un mthode d'un objet null

2-string.IsNullOrWhiteSpace(text) Cela fonctionnerait bien puisque le problème null est vérifié en interne

Pour fournir le même comportement en utilisant la 1ère Option, vous devrez vérifier d'une manière ou d'une autre si ce n'est pas nul, puis utiliser la méthode trim ()

if ((text != null) && string.IsNullOrEmpty(text.Trim())) { ... }
3
répondu CloudyMarble 2016-10-24 09:49:00

L'implémentation réelle des méthodes ressemble.

        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 inconscient que la deuxième méthode vérifie également les espaces blancs non seulement la longueur de la chaîne d'entrée. Les espaces font référence à: https://msdn.microsoft.com/en-us/library/system.char.iswhitespace (v=vs. 110).aspx

3
répondu Ľuboš Čurgó 2016-10-24 10:09:43

chaîne de caractères.isNullOrWhiteSpace(texte) doit être utilisé dans la plupart des cas comme , il comprend également une chaîne vide.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {
            //Your code goes here
            var str = "";

            Console.WriteLine(string.IsNullOrWhiteSpace(str));              

        }
    }
}

Il renvoie True!

0
répondu vibs2006 2017-05-23 08:16:37

[test de Performance] juste au cas où quelqu'un se demande, dans un test de chronomètre comparant

If (nopass.Coupe().Longueur > 0)

Si (!chaîne.IsNullOrWhiteSpace (nopass))



Ce sont les résultats:

Trim-longueur avec valeur vide = 15

Trim-longueur avec valeur non vide = 52


IsNullOrWhiteSpace avec la valeur vide = 11

IsNullOrWhiteSpace avec une valeur non vide = 12

0
répondu Italo Pacheco 2018-01-19 00:47:51