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)
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éthodeChar.IsWhiteSpace
caractère d'espace blanc.
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
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
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
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())) { ... }
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
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!
[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