Saltar al contenido

Objeto nullable debe tener un valor

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 anulableDateTimeya 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *