2011-12-01 17 views
8

¿Cómo puedo escribircadena Convertir a DateTime variable de anulable en una línea

string date = "12/2/2011"; 

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

esto arroja un error de tiempo de compilación. Sé que puedo hacer tryparse or do if {}. ¿Hay alguna manera de hacer esto en una línea?

+1

Tiene un signo de interrogación adicional allí. Debería ser 'DateTime? dt = date? DateTime.Parse (date): null; ' – dasblinkenlight

+0

lo siento, ¿acaba de editar la pregunta hasta la fecha? DateTime.Parse (date) from date ?? null: DateTime.Parse (date) –

+2

No, C# admite el ?? operador (llamado operador elvis en Groovy). Devuelve el valor del lado derecho solo si el valor es nulo; de lo contrario, devuelve el valor en sí mismo. – everton

Respuesta

25

Trate de usar el conditional operator?: en lugar de la null-coalescing operator??:

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

También es necesario para emitir la hipótesis nula a DateTime? de lo contrario obtendrá un error de compilación.

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

Esta solución no sólo asigna null a la DateTime anulable dt cuando la cadena date es null o una cadena vacía, sino también cuando contiene una representación fecha no válida:

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

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

El La instrucción if-else puede ser reemplazada por una expresión ternaria de una línea, pero no la declaración de temp:

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

Downvoter comente. ¿Qué pasa con mi solución? No solo detectará cuándo la fecha es nula, sino también cuando no contiene una cadena de fecha válida. Tenga en cuenta también que dt es anulable. –

+0

No veo ninguna razón para su declaración 'else', ya que dt es nulo desde el principio. – everton

+0

@EvertonAgner: solo si 'dt' es una variable miembro, pero no si es una variable local. Del ejemplo dado en la pregunta, no veo, si 'dt' se define en una clase o en un método. –

Cuestiones relacionadas