empty - isnullorwhitespace c#
Diferencia entre IsNullOrEmpty e IsNullOrWhiteSpace en C# (8)
El primer método comprueba si una cadena es nula o una cadena en blanco. En su ejemplo, puede arriesgarse a una referencia nula ya que no está buscando nulo antes de recortar
1- string.IsNullOrEmpty(text.Trim())
El segundo método verifica si una cadena es nula o un número arbitrario de espacios en la cadena (incluyendo una cadena en blanco)
2- string .IsNullOrWhiteSpace(text)
El método IsNullOrWhiteSpace
cubre IsNullOrEmpty
, pero también devuelve true
si la cadena contiene espacios en blanco.
En su ejemplo concreto, debería usar 2) ya que corre el riesgo de una excepción de referencia nula en el enfoque 1) ya que está llamando a recortar en una cadena que puede ser nula
Esta pregunta ya tiene una respuesta aquí:
¿Cuáles son las diferencias entre estos comandos en C #
string text= " ";
1-string.IsNullOrEmpty(text.Trim())
2-string.IsNullOrWhiteSpace(text)
Espacio , Tab
/t
y newline /n
son la diferencia
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
también vea esta respuesta sobre: personajes en espacio en blanco
La implementación real de los métodos parece.
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;
}
Por lo tanto, es obvio que el segundo método también verifica los espacios en blanco, no solo la longitud de la cadena de entrada. Los espacios en blanco se refieren a: https://msdn.microsoft.com/en-us/library/system.char.iswhitespace(v=vs.110).aspx
Si su cadena (en su caso, el text
variable) podría ser nula, esto representaría una gran diferencia:
1- string.IsNullOrEmpty(text.Trim())
-> EXCEPTION ya que llama a un mthode de un objeto nulo
2- string.IsNullOrWhiteSpace(text)
Esto funcionaría bien ya que el problema nulo se está verificando internamente
Para proporcionar el mismo comportamiento utilizando la 1ª opción, deberá verificar de alguna manera si no es nula primero y luego usar el método trim ()
if ((text != null) && string.IsNullOrEmpty(text.Trim())) { ... }
[Prueba de rendimiento] solo en caso de que alguien se pregunte, en una prueba comparativa de cronómetro
if (nopass.Trim (). Length> 0)
if (! string.IsNullOrWhiteSpace (nopass))
estos fueron los resultados:
Trim-Length con valor vacío = 15
Trim-Length con valor no vacío = 52
IsNullOrWhiteSpace con valor vacío = 11
IsNullOrWhiteSpace con valor no vacío = 12
String.IsNullOrEmpty(string value)
devuelve true
si la cadena es nula o está vacía. Para referencia, una cadena vacía se representa con "" (dos caracteres de comillas dobles)
String.IsNullOrWhitespace(string value)
devuelve true
si la cadena es nula, está vacía o contiene solo espacios en blanco, como un espacio o una pestaña.
Para ver qué caracteres cuentan como espacios en blanco, consulte este enlace: http://msdn.microsoft.com/en-us/library/t809ektx.aspx
string.isNullOrWhiteSpace (text) se debe usar en la mayoría de los casos, ya que también incluye una cadena en blanco .
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));
}
}
}
¡Vuelve verdadero !
IsNullOrWhiteSpace
es un método de conveniencia que es similar al siguiente código, excepto que ofrece un rendimiento superior:
return String.IsNullOrEmpty(value) || value.Trim().Length == 0;
Los caracteres de espacio en blanco están definidos por el estándar Unicode. El método
IsNullOrWhiteSpace
interpreta cualquier carácter que devuelve un valor de verdadero cuando se pasa al métodoChar.IsWhiteSpace
como un carácter de espacio en blanco.