¿Es esta una forma segura y eficiente de manejar la lectura de valores nulos en una base de datos utilizando genéricos?
Pregunta
He estado jugando con genéricos y esperaba poder obtener algunos comentarios o sugerencias sobre una función que creé para ayudar a manejar la lectura de valores nulos de la base de datos. Mi principal preocupación está en la declaración if. ¿Hay una mejor manera de averiguar si T es una cadena ect? Gracias.
public static T CheckNull<T>(object value)
{
if ((value != null) && value.Equals(DBNull.Value))
{
if (object.ReferenceEquals(typeof(T), typeof(String)))
value = string.Empty;
else if (object.ReferenceEquals(typeof(T), typeof(Boolean)))
value = false;
else
value = null;
}
return (T)value;
}
Solución
Independientemente del tipo de T
, puede recurrir a default (T)
que proporcionará el valor predeterminado para el tipo dado ( , string.Empty
0
, false
, null
, etc ...):
value = default(T);
Editar: default (string)
, sin embargo, devuelve nulo
.
Otros consejos
También necesita cubrir otros tipos de datos primitivos.
value = default(T);
Esto devuelve nulo si es un tipo de referencia, de lo contrario 0, falso o lo que sea un valor predeterminado apropiado del tipo T dado.
Nota: el valor predeterminado (cadena) es nulo
, no string.Empty. Si desea que sea String.Empty
, debe implementar esto como una excepción.