2013-05-27 25 views
27

Utilizzo di C#. Ho una stringa dateTimeEnd.Come impostare DateTime su null

Se la stringa è in formato corretto, desidero generare un DateTime e assegnare a eventCustom.DateTimeEnd di tipo

public Nullable<System.DateTime> DateTimeEnd { get; set; } 

Se dateTimeEnd è nullo o vuoto Ho bisogno eventCustom.DateTimeEnd impostato a zero.

Sto cercando di ottenere questo utilizzando il seguente codice, ma ottengo sempre null per eventCustom.DateTimeEnd.

Potresti per favore aiutarmi a definire cosa c'è di sbagliato nel mio codice?

DateTime? dateTimeEndResult; 
    if (!string.IsNullOrWhiteSpace(dateTimeEnd)) 
     dateTimeEndResult = DateTime.Parse(dateTimeEnd); 


eventCustom.DateTimeEnd = dateTimeEndResult = true ? (DateTime?)null : dateTimeEndResult; 

risposta

70

Sembra che si desidera solo:

eventCustom.DateTimeEnd = string.IsNullOrWhiteSpace(dateTimeEnd) 
    ? (DateTime?) null 
    : DateTime.Parse(dateTimeEnd); 

Si noti che questo genererà un'eccezione se dateTimeEnd non è una data valida.

Un'alternativa sarebbe:

DateTime validValue; 
eventCustom.DateTimeEnd = DateTime.TryParse(dateTimeEnd, out validValue) 
    ? validValue 
    : (DateTime?) null; 

che saranno ora impostato il risultato null se dateTimeEnd non è valido. Si noti che TryParse gestisce null come input senza problemi.

+1

Funziona benissimo! Grazie per la spiegazione del tuo tempo :-) – GibboK

+0

Non dovrebbe essere diversamente? Voglio dire quando la stringa contiene '" IsNullOrWhiteSpace "', il valore nullo dovrebbe essere assegnato al campo, quindi '(DateTime?) Null' dovrebbe venire dopo l'operatore condizionale – sohaiby

+0

@sohaiby: Sì, ben individuato. Risolverà. –

3

Questo dovrebbe funzionare:

if (!string.IsNullOrWhiteSpace(dateTimeEnd)) 
    eventCustom.DateTimeEnd = DateTime.Parse(dateTimeEnd); 
else 
    eventCustom.DateTimeEnd = null; 

Si noti che questo sarà un'eccezione se la stringa non è nel formato corretto.

+1

Come 'dateTimeEndResult' è' true'? È un "DateTime?", Non un "bool". –

+0

In questo caso viene visualizzato l'errore L'operatore '==' non può essere applicato agli operandi di tipo 'System.DateTime?'e' bool ' – GibboK

+0

@JonSkeet L'ho inserito come tipo errato quando lo stavo testando. L'ho corretto ora. –

7

DateTime è un non-nullable tipo di valore

DateTime? newdate = null; 

È possibile utilizzare un Nullable<DateTime>

c# Nullable Datetime

1

È possibile scrivere DateTime? newdate = null;

1

Questa riga:

eventCustom.DateTimeEnd = dateTimeEndResult = true ? (DateTime?)null : dateTimeEndResult; 

è uguale a:

eventCustom.DateTimeEnd = dateTimeEndResult = (true ? (DateTime?)null : dateTimeEndResult); 

perché l'operatore condizionale ? ha una priorità più alta rispetto l'operatore di assegnazione =. Ecco perché ottieni sempre null per eventCustom.DateTimeEnd. (MSDN Ref)

0

Ora, non posso usare DateTime?, sto usando DBNull.Value per tutti i tipi di dati. Funziona alla grande.

eventCustom.DateTimeEnd = string.IsNullOrWhiteSpace(dateTimeEnd) 
    ? DBNull.Value 
    : DateTime.Parse(dateTimeEnd); 
Problemi correlati