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