比较可为空的 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
并且 secondTimestamp
是 null
,它 returns 一个值,大于 0
,并且虎钳反之亦然。然后你可以在 conditional operator ?:
中使用这个值来获得预期的结果。
我的代码打算取两个 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
并且 secondTimestamp
是 null
,它 returns 一个值,大于 0
,并且虎钳反之亦然。然后你可以在 conditional operator ?:
中使用这个值来获得预期的结果。