web-dev-qa-db-fra.com

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)
93
Asieh hojatoleslami

IsNullOrWhiteSpace est une méthode pratique qui ressemble à la méthode code suivant, sauf qu’il offre des performances supérieures:

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

Les caractères d'espacement sont définis par le standard Unicode. Le La méthode IsNullOrWhiteSpace interprète tout caractère qui retourne un La valeur true quand elle est transmise à la méthode Char.IsWhiteSpace en tant que caractère d'espace blanc.

138
fionbio

La première méthode vérifie si une chaîne est null ou une chaîne vide. Dans votre exemple, vous pouvez risquer une référence null puisque vous ne recherchez pas la valeur null avant le découpage.

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

La deuxième méthode vérifie si une chaîne est nulle ou 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 elle renvoie également true si la chaîne contient des espaces.

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 pouvant être nulle

32
TGH

Les espaces , tabulation \t et newline \n font 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

31
fubo

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

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

Pour savoir quels caractères comptent comme des espaces, consultez le lien suivant: http://msdn.Microsoft.com/en-us/library/t809ektx.aspx

6
JHubbard80

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

1 -string.IsNullOrEmpty(text.Trim()) ->EXCEPTIONpuisque vous appelez une méthode d'objet null

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

Pour fournir le même comportement en utilisant la 1ère option, vous devez vérifier si sa valeur n'est pas nulle avant d'utiliser la méthode trim (). 

if ((text != null) && string.IsNullOrEmpty(text.Trim())) { ... }
3
CloudyMarble

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

3
Ľuboš Čurgó

[Test de performance] au cas où quelqu'un se le demanderait, dans un test chronométrique comparant

if (nopass.Trim (). Longueur> 0)

if (! string.IsNullOrWhiteSpace (nopass))



ce sont les résultats:

Longueur de rognage avec une valeur vide = 15

Longueur de rognage avec une valeur non vide = 52


IsNullOrWhiteSpace avec une valeur vide = 11

IsNullOrWhiteSpace avec une valeur non vide = 12

0
Italo Pacheco

string.isNullOrWhiteSpace (text)devrait être utilisé dans la plupart des cas comme il inclut é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 retourne Vrai !

0
vibs2006