Quelles sont les différences entre ces commandes en C# ?
string text= " ";
1-string.IsNullOrEmpty(text.Trim())
2-string.IsNullOrWhiteSpace(text)
Quelles sont les différences entre ces commandes en C# ?
string text= " ";
1-string.IsNullOrEmpty(text.Trim())
2-string.IsNullOrWhiteSpace(text)
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éthodeChar.IsWhiteSpace
comme un caractère d'espace blanc.
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.
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)
.LINE SEPARATOR character (U+2028)
.PARAGRAPH SEPARATOR character (U+2029)
.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
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.
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
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 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.