2011-12-05 88 views
6

Cuando hago lo siguiente consigo:no puede convertir implícitamente el tipo System.DateTime? a System.DateTime

inv.RSV = pid.RSVDate 

me sale el siguiente: No se puede convertir implícitamente el tipo System.DateTime? a System.DateTime.

En este caso, inv.RSV es DateTime y pid.RSVDate es DateTime?

He intentado lo siguiente, pero no tuvo éxito:

if (pid.RSVDate != null) 
{     

    inv.RSV = pid.RSVDate != null ? pid.RSVDate : (DateTime?)null; 
} 

Si pid.RSVDate es nulo, no me gusta nada asignar inv.RSV en cuyo caso será nula.

Respuesta

15

DateTime no puede ser nulo. Su valor predeterminado es DateTime.MinValue.

Lo que se quiere hacer es la siguiente:

if (pid.RSVDate.HasValue) 
{ 
    inv.RSV = pid.RSVDate.Value; 
} 

O, más sucintamente:

inv.RSV = pid.RSVDate ?? DateTime.MinValue; 
+0

inv.RSV era nulo para comenzar. ¿Cómo digo que no lo actualice? No hay ningún valor para pid.RSVDate –

+0

@NatePet que verifique 'pid.RSVDate.HasValue'. Si no tiene un valor asignado, 'HasValue' devolverá' false', en cuyo caso no actualizará su otro valor. Según su mensaje de error, 'inv.RSV' es un' DateTime', que posiblemente no puede tener un valor nulo. Si desea asignarle un valor nulo, cambie su tipo a 'DateTime?' Para que sea nulo. –

+0

@NatePet, "inv.RSV era nulo para empezar": ¿estás seguro de eso? Un DateTime ** no puede ser nulo ** –

8

Es necesario hacer la anulable RSV propiedad también, o elegir un valor predeterminado para el caso donde RSVDate es nulo.

inv.RSV = pid.RSVDate ?? DateTime.MinValue; 
+0

+1 por coalescencia nula –

1

si el que está siendo asignado a como DateTime y el que está siendo asignado a es DateTime?, podría utilizar

int.RSV = pid.RSVDate.GetValueOrDefault(); 

Esto apoya una sobrecarga que le permite especificar el valor por defecto, si el el valor predeterminado para DateTime no es ideal.

Si pid.RSVDate es nulo, no me gusta nada asignar inv.RSV en el que caso, será nula.

int.RSV no será nulo, como ya se ha dicho que es DateTime, no un tipo anulable. Si nunca se le asigna por usted, tendrá el valor por defecto de su tipo, que es DateTime.MinValue, o el 1 de enero de 0001.

inv.RSV era nulo, para empezar. ¿Cómo puedo decir que no actualizo no hay ningún valor para pid.RSVDate

Una vez más, esto simplemente no puede ser , dada su descripción de la propiedad. Sin embargo, si en general no desea actualizar inv.RSV si pid.RSVDate es nulo (y se está confundiendo con sus palabras), simplemente debería escribir una verificación if alrededor de la tarea.

if (pid.RSVDate != null) 
{ 
    inv.RSV = pid.RSVDate.Value; 
} 
2

Como inv.RSV no es un campo que admite nulos, no puede ser NULO. Cuando inicializas tu objeto, es una inv predeterminada.RSV a un DateTime vacío, el mismo que se obtendría si usted dijo

inv.RSV = new DateTime() 

lo tanto, si desea establecer inv.RSV a pid.RSV si no es NULL, o el valor por defecto es DateTime es nula , hacer esto:

inv.RSV = pid.RSVDate.GetValueOrDefault() 
0

pid.RSVDate tiene la posibilidad de ser null, mientras que inv.RSV no, por lo que pasaría si RSVDate es null?

Es necesario comprobar si el valor es nulo antes -

if(pid.RSVDate.HasValue) 
    inv.RSV = pid.RSVDate.Value; 

Pero ¿cuál sería el valor de inv.RSV ser si RSVDate es nulo? ¿Hay siempre va a ser una fecha en esta propiedad? De ser así, podría usar el operador ?? para asignar un valor predeterminado si así lo desea.

pid.RSV = pid.RSVDate ?? myDefaultDateTime; 
Cuestiones relacionadas