Autor en Google+
Saltar al contenido

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web ASP.NET, ASP.NET Core, MVC, SignalR, Entity Framework, C#, Azure, Javascript... y lo que venga ;)

10 años online 🎂

el blog de José M. Aguilar

Inicio El autor Contactar

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web
ASP.NET, ASP.NET Core, MVC, SignalR, Entity Framework, C#, Azure, Javascript...

¡Microsoft MVP!
miércoles, 4 de noviembre de 2009

Cadenas 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);
    }
}
 
Como ya comenté por aquí hace tiempo, la ventaja que tiene utilizar esta técnica es que permite invocar el método sobre una instancia de cadena, aunque ésta sea nula, sin riesgo a errores:
 
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.

Estos contenidos se publican bajo una licencia de Creative Commons Licencia Reconocimiento-No comercial-Compartir bajo la misma licencia 3.0 España de Creative Commons

7 Comentarios:

Anónimo dijo...

¿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.

José M. Aguilar dijo...

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!

Sergi dijo...

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

Sergi dijo...

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

José M. Aguilar dijo...

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.

Anónimo dijo...

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

Anónimo dijo...

If String.IsNullOrEmpty(sss) Then
End If


eso ya existe