比较可为空的 DateTimeOffset 变量的最佳方法?

Best way to compare nullable DateTimeOffset variables?

我的代码打算取两个 DateTimeOffset? 变量中最大的一个。我一直在使用以下代码执行此操作:

return firstTimestamp > secondTimestamp ? firstTimestamp : secondTimestamp

但是,如 MSDN 文档所述,如果任一值为 null,则操作始终解析为 False。这意味着如果值在 firstTimestamp 中,并且 secondTimestamp 为 null,则在应返回 firstTimestamp 的地方返回 null。

是否有一种有效的速记方式来进行此比较以计算空值?我能想到的唯一解决方案是:

if(firstTimestamp.HasValue && secondTimestamp.HasValue){
    return firstTimestamp > secondTimestamp ? firstTimestamp : secondTimestamp;
}else if(firstTimestamp.HasValue){
    return firstTimestamp;
}
return secondTimestamp;

你可以使用 Nullable.Compare<T> 方法

DateTimeOffset? firstTimestamp = DateTimeOffset.Now;
DateTimeOffset? secondTimestamp = null;

var result = Nullable.Compare(firstTimestamp, secondTimestamp) > 0 ? firstTimestamp : secondTimestamp;

如果 firstTimestamp 不是 null 并且 secondTimestampnull,它 returns 一个值,大于 0,并且虎钳反之亦然。然后你可以在 conditional operator ?: 中使用这个值来获得预期的结果。