[Tip] Extendiendo TypeConverter para tratar con nulos - El blog de Javier Torrecilla

[Tip] Extendiendo TypeConverter para tratar con nulos

Introducción

En este mini post voy a definir un método extensor al tipo TypeConverter para el tratamiento de valores nulos provenientes de la BD.

Al Lio

Como todos sabeis ( y sino muy mal...) un nulo proveniente de la Base de Datos va a ser DbNull.Value (no es el mismo null que en c#), bien para evitar problemas con el uso de TypeConverter, vamos a definir la siguiente extensión:

 

 

 public static class TypeConverterExtensions

    {

        public static object ConvertToWithNullableValues(this TypeConverter converter, object value, Type propertyTipe)

        {

            if ((value == null || value == DBNull.Value))

                return null;

           if (value.GetType().Equals(propertyType)) return value;

            return converter.ConvertTo(value, propertyTipe);



        }

    }

Un ejemplo de su utilización sería:

reg.GetType().GetProperty(prop.Name).SetValue(reg, converter.ConvertToWithNullableValues(reader[prop.Name], prop.PropertyType), null);

En el ejemplo estoy usando Reflection porque accedo dinamicamente a las propiedades...

Bueno espero que os sea de utilidad.

 

 

Saludos!

PD: He añadido una condición más para que si los tipos del objeto y el tipo a convertir coincidan no intente hacer una conversión.

Published 4/7/2012 8:55 por Javier Torrecilla
Comparte este post:
http://geeks.ms/blogs/jtorrecilla/archive/2012/07/04/tip-extendiendo-typeconverter-para-tratar-con-nulos.aspx

Comentarios

# re: [Tip] Extendiendo TypeConverter para tratar con nulos

¡Hola máquina!

A ver que te parece esto, si a la vez que extendemos el método aplicamos genéricos...:

public static T ConvertToWithNullableValues<T>(this object value)

      {

          if ((value == null || value == DBNull.Value))  return default(T);

          if (value.GetType().Equals(typeof(T))) return (T)value;

          return (T)Convert.ChangeType(value, typeof(T));

      }

Y su empleo sería: dr["Campo"].ConvertToWithNullableValues<TipoQueDebeResultar>();

Aunque yo le haría otro cambio más porque necesito que los campos nulos se conviertan en strings vacios por lo que lo dejaría:

public static T ConvertToWithNullableValues<T>(this object value)

      {

          if ((value == null || value == DBNull.Value))

              if (value.GetType().Equals(typeof(string)))

                    {

                        return (T)Convert.ChangeType((string.Empty), typeof(T));                

                    }

              else

              {

                  return default(T);

              }

          if (value.GetType().Equals(typeof(T))) return (T)value;

          return (T)Convert.ChangeType(value, typeof(T));

      }

Que tengas un buen día. Un abrazo y gracias por compartir ;-).

Friday, July 06, 2012 9:37 AM por Corsariovasco

# re: [Tip] Extendiendo TypeConverter para tratar con nulos

Genial aporte Corsario. :D

Friday, July 06, 2012 9:49 AM por Javier Torrecilla