Foros del Web » Programación para mayores de 30 ;) » .NET »

Tengo mis dudas respecto a las ventajas de los Nullable Types

Estas en el tema de Tengo mis dudas respecto a las ventajas de los Nullable Types en el foro de .NET en Foros del Web. Buenos días. Después de revisar un poco cómo utilizar los Nullable Types, llego a la conclusión de que no me aportan nada nuevo. Me explico. ...
  #1 (permalink)  
Antiguo 26/01/2011, 03:37
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 4 meses
Puntos: 9
Tengo mis dudas respecto a las ventajas de los Nullable Types

Buenos días.
Después de revisar un poco cómo utilizar los Nullable Types, llego a la conclusión de que no me aportan nada nuevo.
Me explico.
En un principio, me entusiasmó la idea, pues pensé que de esta forma podía disponer de un tipo de datos, por ejemplo, Nullable(Of DateTime), que aceptaría como valores tanto fechas como DBNull.Value
Pero cuál es mi sorpresa, que cuando intento asignarle un DBNull.Value obtengo un error en tiempo de diseño. Vamos, que no cuela!
Entonces empiezo a buscar información y me encuentro con que, a pesar de utilizar Nullable Types, uno tiene que preguntar a la variable algo así:
Código VB.NET:
Ver original
  1. Dim miFecha As Nullable(Of DateTime)
  2. [...]
  3. If miFecha.HasValue Then
  4.   dRow("CampoFechaBD") = miFecha
  5. Else
  6.   dRow("CampoFechaBD") = DBNull.Value
  7. End If

Ahí se cayó todo el mito para mi.
Un tipo Nullable, a mi entender debería permitir que yo hiciera algo así:
Código VB.NET:
Ver original
  1. Dim miFecha As Nullable(Of DateTime)
  2. miFecha = DBNull.Value
  3. dRow("CampoFechaBD") = miFecha

En este caso si que me quitaría código de encima el hecho de usar Nullable Types, pero si he de preguntar si tiene valor (HasValue) como en el caso de arriba, ya estamos igual.
Para eso, sigo utilizando el código que vengo usando hasta ahora:
Código VB.NET:
Ver original
  1. Dim miFecha As DateTime
  2. [...]
  3. If Not miFecha Is Nothing Then
  4.   dRow("CampoFechaBD") = miFecha
  5. Else
  6.   dRow("CampoFechaBD") = DBNull.Value
  7. End If

En fin, esta ha sido una de mis primeras experiencias con los Nuyllable Types.
Dejo este hilo abierto para quien pueda aportar información o un punto de vista diferente (o igual) sobre este tema.
Saludos.
__________________
..:: moNTeZIon ::..
  #2 (permalink)  
Antiguo 31/01/2011, 08:51
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 4 meses
Puntos: 9
Respuesta: Tengo mis dudas respecto a las ventajas de los Nullable Types

Veo que nadie comenta nada al respecto de los Nullable Types.
¿Será que no lo utilizan?
Finalmente si le he encontrado ya una buena utilidad.
No es que estén pensados para hacer esto exactamente:
Código VB.NET:
Ver original
  1. Dim miFecha As Nullable(Of DateTime)
  2. miFecha = DBNull.Value
  3. dRow("CampoFechaBD") = miFecha
Si no, más bien esto:
Código VB.NET:
Ver original
  1. Dim miFecha As Nullable(Of DateTime)
  2. miFecha = Nothing
  3. If Not miFecha Is Nothing Then
  4.   dRow("CampoFechaBD") = miFecha
  5. Else
  6.   dRow("CampoFechaBD") = DBNull.Value
  7. End If
Lo que no permiten hacer los DateTime "normales" y que si permiten hacer los Nullable(Of DateTime) es la siguiente instrucción:
Código VB.NET:
Ver original
  1. miFecha = Nothing
El tipo DateTime, no es que no permita esto, si no que al realizar la igualación a Nothing, la variable sigue teniendo un valor DateTime (podéis hacer la prueba).
En cambio cuando igualamos a Nothing un tipo Nullable(Of DateTime) la variable si que toma realmente el valor "Nothing". Por lo tanto, he aquí la potencia de los Nullable Types.
Espero que mi paja mental le haya servido a alguien.
Saludete!
__________________
..:: moNTeZIon ::..

Etiquetas: ventajas, type
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:01.