2012-01-26 17 views
5

así que tienen esta variable anulable creé:DateTime.TryParse no acepta NULL fecha y hora?

private DateTime? _startDate; 

yo quería analizar algunas variables de fecha y hora y luego asignarla a esta variable, pero el VS se queja de que el método TryParse tiene algunos argumentos no válidos.

if (string.IsNullOrEmpty(Request.Form["StartDate"]) == false) 
     { 
      DateTime.TryParse(Request.Form["StartDate"], out _startDate); 
     } 
     else 
     { _startDate = null; } 

¿Existe un error de sintaxis Tengo o no puedo usar variables con nulos aquí?

Respuesta

10

No, DateTime.TryParse() no acepta DateTime? porque DateTime? es realmente Nullable<DateTime> - no es un tipo compatible.

Tal vez puedas probar:

if (string.IsNullOrEmpty(Request.Form["StartDate"]) == false) 
    { 
     var dtValue = new DateTime(); 
     if (DateTime.TryParse(Request.Form["StartDate"], out dtValue)) { 
      _startDate = dtValue; 
     } 
     else { 
      _startDate = null; 
     } 
    } 
    else 
    { _startDate = null; } 
+0

gracias, excelente respuesta – Victor

+2

Tenga en cuenta que en realidad no hay una necesidad de que el cheque nulo o vacío - DateTime.TryParse lo hará por usted, lo que podría simplificar este bloque un poco. –

+0

@ReedCopsey Sí, buen punto. La única parte necesaria es la parte 'verdadera' del condicional después de la comprobación actual de 'IsNullOrEmpty (...)'. – Yuck

0

DateTime? y DateTime son diferentes y no compatibles tipos en relación con out. Entonces necesita usar DateTime y luego copiar el valor como en la respuesta de Yuck.

11

Como han dicho otros, no son tipos compatibles. Yo sugeriría que se crea un nuevo método que envuelve DateTime.TryParse y vuelve un Nullable<DateTime>:

A continuación, puede simplemente usar:

_startDate = Helpers.TryParseNullableDateTime(Request.Form["StartDate"]); 

(No hay necesidad de comprobar la cadena nula o vacía; TryParse simplemente devolverá falso en ese caso de todos modos.)

+1

Jon !! soy tu fan! –

+0

gracias, gran sugerencia – Victor

+0

+1 Algo que me gustaría ver agregado a la clase 'Nullable '. – Yuck

0

Aquí está el código. La excepción ha sido manejada.

if (string.IsNullOrEmpty(Request.Form["StartDate"]) == false) 
     { 
      DateTime strtDate; 
      try 
       { 
       strtDate = Convert.ToDateTime(Request.Form["StartDate"]); 
       _startDate = strtDate; 
       } 
      catch(Exception) 
       { 
       _startDate = null; 
       } 
     } 
     else 
     { 
     _startDate = null; 
     } 
Cuestiones relacionadas