Esta es el arreglo más acertada que te podemos dar, pero primero mírala pausadamente y analiza si es compatible a tu trabajo.
Solución:
Deberías cambiar la línea. this.MyDateTime = myNewDT.MyDateTime.Value;
para sólo this.MyDateTime = myNewDT.MyDateTime;
La excepción que estabas recibiendo fue lanzada en el .Value
propiedad de la anulableDateTime
ya que se requiere devolver un DateTime
(ya que para eso está el contrato) .Value
estados), pero no puede hacerlo porque no hay DateTime
para volver, por lo que lanza una excepción.
En general, es una mala idea llamar a ciegas .Value
en un tipo anulable, a menos que tenga algún conocimiento previo de que esa variable DEBER contienen un valor (es decir, a través de un .HasValue
controlar).
EDITAR
Aquí está el código para DateTimeExtended
que no arroja una excepción:
class DateTimeExtended
public DateTime? MyDateTime;
public int? otherdata;
public DateTimeExtended()
public DateTimeExtended(DateTimeExtended other)
this.MyDateTime = other.MyDateTime;
this.otherdata = other.otherdata;
Lo probé así:
DateTimeExtended dt1 = new DateTimeExtended();
DateTimeExtended dt2 = new DateTimeExtended(dt1);
Agregando el .Value
en other.MyDateTime
provoca una excepción. Eliminarlo elimina la excepción. Creo que estás buscando en el lugar equivocado.
Al usar métodos de extensión LINQ (p. ej. Select
, Where
), la función lambda podría convertirse a SQL que podría no comportarse de manera idéntica a su código C#. Por ejemplo, el cortocircuito de C# evaluado &&
y ||
se convierten en ansiosos de SQL AND
y OR
. Esto puede causar problemas cuando está buscando null en tu lambda.
Ejemplo:
MyEnum? type = null;
Entities.Table.Where(a => type == null ||
a.type == (int)type).ToArray(); // Exception: Nullable object must have a value
Intenta dejar caer el .value
DateTimeExtended(DateTimeExtended myNewDT)
this.MyDateTime = myNewDT.MyDateTime;
this.otherdata = myNewDT.otherdata;
Si entiendes que ha resultado provechoso este post, sería de mucha ayuda si lo compartieras con más entusiastas de la programación de este modo contrubuyes a dar difusión a nuestro contenido.