在 Null 对象的 属性 上使用 Null 条件运算符
Use Null Conditional Operator on property of Null Object
我想使用 Null-Conditional Operator 来检查下面的 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
是null,Subscription?.SubscriptionExpires
returns一个null reference exception
,所以我们还是剩下旧的
if (subscription != null)
当父对象可以为 null 时,如何使用 Null 条件运算符读取 属性?
How do I use the Null-Conditional Operator to read a property when the parent object can be null?
您可以像 Subscription?.SubscriptionExpires
一样进行操作。这不会抛出 NullReferenceException
,但会抛出 return DateTime?
。如果您尝试使用 DateTime?
的值,则会出现异常。所以这不会抛出:
var expiration = Subscription?.SubscriptionExpires;
但这可能:
DateTime? expiration = Subscription?.SubscriptionExpires;
DateTime expiration.Value;
如果您希望 "var expiration" 在将其用作 DateTime 数据类型时永远不会抛出异常,您可以使用
var expiration = subscription?.SubscriptionExpires ?? DateTime.MinValue;
我想使用 Null-Conditional Operator 来检查下面的 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
是null,Subscription?.SubscriptionExpires
returns一个null reference exception
,所以我们还是剩下旧的
if (subscription != null)
当父对象可以为 null 时,如何使用 Null 条件运算符读取 属性?
How do I use the Null-Conditional Operator to read a property when the parent object can be null?
您可以像 Subscription?.SubscriptionExpires
一样进行操作。这不会抛出 NullReferenceException
,但会抛出 return DateTime?
。如果您尝试使用 DateTime?
的值,则会出现异常。所以这不会抛出:
var expiration = Subscription?.SubscriptionExpires;
但这可能:
DateTime? expiration = Subscription?.SubscriptionExpires;
DateTime expiration.Value;
如果您希望 "var expiration" 在将其用作 DateTime 数据类型时永远不会抛出异常,您可以使用
var expiration = subscription?.SubscriptionExpires ?? DateTime.MinValue;