日期时间 - 比较未按预期工作

时间:2017-09-21 07:56:09

标签: c#

我有以下条件:

if (audit.CheckedoutBy != null && 
    audit.AuditStatus != null && 
    audit.AuditStatus.CheckOutDate != null && 
    audit.AuditStatus.CheckOutDate < DateTime.Now.AddDays(-1)) {
  // other stuff
}
else {
  _log.Debug($"No changes made. Status:{audit.AuditStatus}, checkoutdate: {audit.AuditStatus?.CheckOutDate}, checkedOutBy: {audit.AuditStatus?.CheckedOutby}");
}

现在我的日志显示的内容如下:

  

DEBUG 2017-09-19 03:00:44,125 40182ms [1] CheckoutCheck DiscardCheckouts - 未做任何更改。状态:Entities.AuditStatus,checkoutdate:31.07.2017 14:20:41,checkedOutBy:Entities.SharePointUser

     

DEBUG 2017-09-19 03:00:44,125 40182ms [1] CheckoutCheck
  DiscardCheckouts - 未做任何更改。状态:Entities.AuditStatus,   checkoutdate:18.07.2017 13:57:51,checkedOutBy:   Entities.SharePointUser

正如您在日志中看到的那样,代码已跳转到&#34;否则&#34;条件。然而,日期早于&#34;昨天&#34;。 其他条件也不能为空:CheckedOutBy不能为空,因为日志显示一个对象而不是null。 audit.AuditStatus不能为null,如果是,则不会有audit.AuditStatus.CheckoutDate

在比较可以为空的DateTime时是否存在问题?或者其他地方可能是问题?

日志是在我无法调试的服务器上创建的

根据我的理解,Log-Output对于那个条件没有意义

1 个答案:

答案 0 :(得分:3)

由于else分支中的输出证明所有其他值都符合条件(假设_log.Debug打印正确的时间),唯一的可能是audit.CheckedOutBy是{{1 }}

null条件下,您要测试if。但是在调试消息中输出audit.CheckedOutBy != null