在Null对象的属性上使用Null Conditional Operator

时间:2016-01-19 05:48:53

标签: c# entity-framework-core c#-6.0

我想使用Null-Conditional运算符检查下面的SubscriptionExpires属性。

    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; }
}

返回订阅
var subscription = _customersContext.Subscriptions.Where(s => s.SubscriptionId == user.SubscriptionId).FirstOrDefault();

但是如果Subscription为空,Subscription?.SubscriptionExpires会返回null reference exception,那么我们仍然会留下旧的

if (subscription != null)

当父对象可以为null时,如何使用Null-Conditional运算符来读取属性?

2 个答案:

答案 0 :(得分:5)

  

当父对象可以为null时,如何使用Null-Conditional运算符来读取属性?

您就像使用Subscription?.SubscriptionExpires一样。这不会抛出NullReferenceException,但会返回DateTime?。如果您尝试使用DateTime?的值,那么您将获得异常。所以这不会抛出:

var expiration = Subscription?.SubscriptionExpires;

但这可能:

DateTime? expiration = Subscription?.SubscriptionExpires;
DateTime expiration.Value;

答案 1 :(得分:1)

如果您希望&#34; var expiration&#34; 在将其用作DateTime数据类型时不应抛出异常,您可以使用

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