Encuentro en el blog de Gunnar Peipman un post sobre el nuevo método string.IsNullOrWhiteSpace, aparecido en .NET Framework 4.0 Beta 2, cuya misión es retornar un booleano indicando si la cadena pasada como parámetro contiene un nulo, está vacío, o exclusivamente caracteres de espaciado (espacios, saltos de línea, tabulaciones, etc.), un escenario bastante frecuente cuando estamos, por ejemplo, validando formularios o cualquier tipo de datos de entrada.
Por si no podemos esperar hasta la llegada de la nueva versión del framework, Gunnar propone una solución temporal basada en crear un método de extensión sobre la clase string
que realice la misma tarea:
public static class StringHelper
{
public static bool IsNullOrWhiteSpace(this string s)
{
if (s == null)
return true;
return (s.Trim() == string.Empty);
}
}
string a = null;
string b = " ";
string c = "\n";
string d = "Hey!";
Console.Write (a.IsNullOrWhiteSpace()); // True
Console.Write (b.IsNullOrWhiteSpace()); // True
Console.Write (c.IsNullOrWhiteSpace()); // True
Console.Write (d.IsNullOrWhiteSpace()); // False
Y para los fieles a Visual Basic .NET, ahí va el código equivalente:
Imports System.Runtime.CompilerServices
Public Module StringHelper
<Extension()> _
Public Function IsNullOrWhiteSpace(ByVal s As String) As Boolean
If s Is Nothing Then
Return True
End If
Return s.Trim() = String.Empty
End Function
End Module
Publicado en: Variable not found.
7 Comentarios:
¿No te parece que, en ocasiones, el uso indistinto de null y cadena vacía puede deberse a errores de diseño y con ese método no está el desarrollador más que "tapando" un problema subyacente más profundo?
Creo que en muchas ocasiones habría que preguntarse : "¿por qué puede llegarme null y cadena vacía?" antes de utilizar ese método.
Saludos.
Pues sí, anónimo, en ocasiones la recepción de un nulo puede ser una pista de que algo no se está haciendo correctamente en algún otro punto del sistema, o simplemente de que se ha tomado otro criterio para representar el "vacío" en una cadena. En cualquier caso, sería conveniente, como indicas, preguntarse el por qué, para evitar posteriores problemas.
Hay otras ocasiones, sin embargo, en las que el nulo, la cadena vacía e incluso los espacios en blanco pueden ser semánticamente similares y queremos tratarlos de la misma forma, y ahí es donde éste método sería útil.
Saludos y gracias por aportar!
Eso esta muy bien Anónimo, si es un proyecto de Cero claro, pero muchas veces la recepción de los datos te vienen de mil sitios o el desarrollo es solo parte de todo un sistema o bien muy antiguo o realizado por alguien ausente.
En muchas bases de datos he visto blancos en vez de nulos, y ya no te digo en los clientes donde los datos pueden ser manipulados por los usuarios, pufff
Creo que tienes un error, deberia ser asi:
Public Function IsNullOrWhiteSpace(ByVal s As String) As Boolean
If s Is Nothing Then Return True
If s.Trim() = String.Empty Then Return True
Return False
End Function
Sino en el 2º caso te devuelve un string.
¿Creo yo?
Saludos
Hola, Sergi.
En el segundo caso, la línea:
Return s.Trim() = String.Empty
Es equivalente a tu propuesta:
If s.Trim() = String.Empty Then Return True
Return False
Ten en cuenta que se retorna el resultado de la expresión, que es una comparación de igualdad, por lo que devolvería true si la cadena (trimeada) es vacía, y falso en caso contrario.
Se trata simplemente de una forma más corta de expresarlo :-)
Saludos y gracias por comentar.
Me parece genial que hagan este tipo de funciones, pero se han puesto a pensar para que hacer algo que ya se hizo?????. Se deben hacer cosas nuevas mas no versiones de lo mismo que ya tenemos(claro para estos casos).
En VB NET existe ya la funcion IsNullOrEmpty, solo basta con llamarla, por ejemplo:
If String.IsNullOrEmpty(Valor) Then
"... codigo ...."
End If
If String.IsNullOrEmpty(sss) Then
End If
eso ya existe
Enviar un nuevo comentario