¿Fecha y hora valor "nulo"/no inicializado?
¿Cómo se maneja un DateTime que debería poder contener un valor no inicializado (equivalente a nulo)?
Tengo una clase que podría tener un valor de propiedad DateTime establecido o no. Estaba pensando en inicializar el titular de la propiedad en DateTime.MinValue, que luego podría verificarse fácilmente.
He estado buscando mucho pero no pude encontrar una solución.
Supongo que esta es una pregunta bastante común, ¿cómo se hace eso?
Para DateTimes normales, si no los inicializa en absoluto, coincidirán DateTime.MinValue
, porque es un tipo de valor en lugar de un tipo de referencia.
También puedes usar un DateTime que acepte valores NULL, como este:
DateTime? MyNullableDate;
O la forma más larga:
Nullable<DateTime> MyNullableDate;
Y, finalmente, hay una forma integrada de hacer referencia al valor predeterminado de cualquier tipo. Esto regresa null
para tipos de referencia, pero para nuestro ejemplo de DateTime devolverá lo mismo que DateTime.MinValue
:
default(DateTime)
o, en versiones más recientes de C#,
default
Si está utilizando .NET 2.0 (o posterior), puede utilizar el tipo que acepta valores NULL:
DateTime? dt = null;
o
Nullable<DateTime> dt = null;
Entonces despúes:
dt = new DateTime();
Y puedes comprobar el valor con:
if (dt.HasValue)
{
// Do something with dt.Value
}
O puedes usarlo como:
DateTime dt2 = dt ?? DateTime.MinValue;
Puede leer más aquí:
http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx
El siguiente camino también funciona
myClass.PublishDate = toPublish ? DateTime.Now : (DateTime?)null;
Tenga en cuenta que la propiedad PublishDate debe ser DateTime.
¿Fecha y hora? MiFechaHora{get;set;}
MyDateTime = (dr["f1"] == DBNull.Value) ? (DateTime?)null : ((DateTime)dr["f1"]);