Quiero usar el método DateTime.TryParse para obtener el valor de fecha y hora de una cadena en un valor Nullable. Pero cuando intento esto:
DateTime? d;
bool success = DateTime.TryParse("some date text", out (DateTime)d);
el compilador me dice
El argumento 'out' no se clasifica como una variable
No estoy seguro de lo que tengo que hacer aquí. También probé:
out (DateTime)d.Value
y eso tampoco funciona. ¿Algunas ideas?
Como dice Jason, puede crear una variable del tipo correcto y pasarla. Es posible que desee encapsularlo en su propio método:
... o si te gusta el operador condicional:
O en C # 7:
fuente
Parse
esperar que regresaraDateTime
y arrojara una excepción en caso de falla, ¿verdad? Pero sí, puedes hacer lo que quieras ... y en Noda Time, he nombrado los métodos relevantes en suParse
lugar.else
palabra clave es innecesaria (en su primer ejemplo) ya queif
nunca se puede alcanzar el punto final del bloque.Aquí hay una edición un poco concisa de lo que sugirió Jason:
fuente
No puedes porque
Nullable<DateTime>
es de un tipo diferente aDateTime
. Necesitas escribir tu propia función para hacerlo,Espero que esto ayude :)
EDITAR: Se eliminó el método de extensión (obviamente) probado incorrectamente, porque (como lo señaló algún mal hoor) los métodos de extensión que intentan cambiar el parámetro "this" no funcionarán con los tipos de valor.
PD: El Bad Hoor en cuestión es un viejo amigo :)
fuente
¿Qué hay de crear un método de extensión?
fuente
dateTime
? Nunca se usa.DateTime? TryParse(this string dateString)
. Esta implementación es simplemente extraña.(DateTime?).TryParse( ... )
oNullable<DateTime>.TryParse( ... )
. Mike Z tiene razón, esta es una firma tonta del método.No veo por qué Microsoft no manejó esto. Un pequeño método de utilidad inteligente para lidiar con esto (tuve el problema con int, pero reemplazar int con DateTime tendrá el mismo efecto, podría ser .....
fuente
Este es el delineador que estás buscando:
Si desea convertirlo en un método de pseudoextensión TryParse adecuado, puede hacer esto:
fuente
Aquí hay una solución de una sola línea:
fuente
Alternativamente, si no le preocupa la posible excepción planteada, puede cambiar TryParse por Parse:
Aunque tampoco habrá un booleano que indique el éxito, podría ser práctico en algunas situaciones en las que se sabe que el texto de entrada siempre será válido.
fuente