我有以下条件:
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对于那个条件没有意义
答案 0 :(得分:3)
由于else
分支中的输出证明所有其他值都符合条件(假设_log.Debug
打印正确的时间),唯一的可能是audit.CheckedOutBy
是{{1 }}
在null
条件下,您要测试if
。但是在调试消息中输出audit.CheckedOutBy != null
。