Usar el operador condicional nulo en la propiedad del objeto nulo

c# c#-6.0 entity-framework-core

Pregunta

Me gustaría usar el operador condicional nulo para verificar la propiedad SubscriptionExpires continuación.

    public partial class Subscription
{
    [Key]
    public int SubscriptionId { get; set; }
    public string SubscriberId { get; set; }
    public DateTime? SubscriptionExpires { get; set; }

    public virtual ICollection<ApplicationUser> Users { get; set; }
}

Una suscripción es devuelta por

    public partial class Subscription
{
    [Key]
    public int SubscriptionId { get; set; }
    public string SubscriberId { get; set; }
    public DateTime? SubscriptionExpires { get; set; }

    public virtual ICollection<ApplicationUser> Users { get; set; }
}

Sin embargo, si la Subscription es nula, la Subscription?.SubscriptionExpires devuelve una null reference exception , por lo que aún nos queda el antiguo

    public partial class Subscription
{
    [Key]
    public int SubscriptionId { get; set; }
    public string SubscriberId { get; set; }
    public DateTime? SubscriptionExpires { get; set; }

    public virtual ICollection<ApplicationUser> Users { get; set; }
}

¿Cómo uso el operador condicional nulo para leer una propiedad cuando el objeto principal puede ser nulo?

Respuesta aceptada

¿Cómo uso el operador condicional nulo para leer una propiedad cuando el objeto principal puede ser nulo?

¿Lo haces tal como lo hiciste con la Subscription?.SubscriptionExpires . Esto no lanzará una NullReferenceException , pero devolverá DateTime? . ¿Si intentas usar el DateTime? el valor de entonces obtendrá una excepción. Así que esto no va a tirar:

var expiration = Subscription?.SubscriptionExpires;

Pero esto puede:

var expiration = Subscription?.SubscriptionExpires;

Respuesta popular

Si desea que "cad expiration" nunca debe lanzar una excepción mientras la usa como el tipo de datos DateTime, puede usar

var expiration = subscription?.SubscriptionExpires ?? DateTime.MinValue;



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué