2011-12-01 7 views
8

Come posso scriverestringa Converti in DateTime variabile annullabile in una linea

string date = "12/2/2011"; 

DateTime? dt = date ?? DateTime.Parse(date); 

questo genera un errore di compilazione. So che posso fare tryparse or do if {}. C'è un modo per farlo in una riga?

+1

Hai un punto interrogativo in più lì. Dovrebbe essere 'DateTime? dt = date? DateTime.Parse (date): null; ' – dasblinkenlight

+0

scusa, ho appena modificato la domanda fino ad oggi ?? DateTime.Parse (date) dalla data ?? null: DateTime.Parse (date) –

+2

No, C# supporta il ?? operatore (chiamato operatore elvis in Groovy). Restituisce il valore del lato destro solo se il valore è nullo, altrimenti restituisce il valore stesso. – everton

risposta

25

Provare a utilizzare il conditional operator?: posto del null-coalescing operator??:

DateTime? dt = date == null ? (DateTime?)null : DateTime.Parse(date); 

È inoltre necessario lanciare il nulla per DateTime? altrimenti si otterrà un errore di compilazione.

1
string date = "12/2/2011"; 
date = Convert.ToDateTime(date); 
3
string date = "12/2/2011"; 

DateTime? dt = String.IsNullOrEmpty(date) ? (DateTime?)null : DateTime.Parse(date); 
2

Questa soluzione non solo assegna null al DateTime nullable dt quando la stringa date è null o una stringa vuota, ma anche quando contiene una rappresentazione data non valida:

string date = null; // or "01/02/2011" 
DateTime? dt; 

DateTime temp; 
if (DateTime.TryParse(date, out temp)) { 
    dt = temp; 
} else { 
    dt = null; 
} 

L' l'istruzione if-else può essere sostituita da un'espressione ternaria a una riga, tuttavia non la dichiarazione di temp:

DateTime temp; 
dt = DateTime.TryParse(date, out temp) ? temp : (DateTime?)null; 
+0

Downnotatore si prega di commentare. Cosa c'è di sbagliato nella mia soluzione? Non rileverà solo quando la data è nullo, ma anche quando non contiene una stringa di data valida. Si noti inoltre che dt è nullable. –

+0

Non vedo alcun motivo per la tua istruzione 'else', dato che dt è nullo dall'inizio. – everton

+0

@EvertonAgner: solo se 'dt' è una variabile membro, ma non se è una variabile locale. Dall'esempio fornito nella domanda, non vedo, se 'dt' è definito in una classe o in un metodo. –