Como sabemos, los Extensions Methods son una de las nuevas características de C# 3.0. Podemos verlos como métodos estáticos que permiten agregar nuevas funcionalidades a clases ya existentes. No es mi intención explicar cómo crear Extensions Methods (pueden aprender más aquí y aquí), sino compartir varios extensions methods que uso habitualmente en mis proyectos de desarrollo.
Convirtiendo Strings
Convertir cadenas de texto a un número o fecha es una necesidad habitual en todos los proyectos. El código típico es el siguiente:
int number = int.Parse(NumberTextBox.Text);
DateTime date = DateTime.Parse(DateTextBox.Text);
El mismo resultado podríamos obtener usando la clase Convert:
int number = Convert.ToInt32(NumberTextBox.Text);
DateTime date = Convert.ToDateTime(DateTextBox.Text);
En este caso tenemos la ventaja de que si el argumento es null, el valor devuelto es cero. Esto puede comprobarse con Reflector.
Ninguno de los métodos anteriores resuelve el problema de conversión de datos cuando el usuario ingresa letras donde se esperaba números o fechas con formatos no válidos.
Para evitar esta situación podemos usar validators de ASP.NET, controles de máscara o bien el método TryParse:
int number;
if (int.TryParse(NumberTextBox.Text, out number))
{
//TODO: Do something
}
El único problema con esta solución es que implica escribir mucho más código, generando rutinas más extensas y difíciles de leer.
La situación se complica un poco más con los Guid, pues no disponen de un método TryParse, entonces habría que usar Try/Catch, lo que complica aún más el código resultante.
String Extensions
Es aquí donde los Extensions Métodos pueden proporcionar una solución efectiva, elegante e intuitiva. La siguiente figura muestra cómo convertir una cadena a un número usando un extension method:
La implementación del extension method es muy simple:
He creado una clase StringExtensions.cs con varios extensions methods para convertir a byte, short, long, float, double, decimal, boolean, datetime, guid, etc. Incluí también versiones compatibles con tipos nullables. Seguiré agregando nuevos métodos en la medida que encuentre aplicación práctica y aporten simplicidad en el código.
A continuación les dejo el link para descargar la clase StringExtensions.cs. En próximos post, publicaré otros extensions methods aplicables a controles de ASP.NET. Espero que sirva.
Saludos, Gus