我有一些代码,打算取两个变量中最大的一个。DateTimeOffset?
变量。我一直在使用下面的代码进行操作。
return firstTimestamp > secondTimestamp ? firstTimestamp : secondTimestamp
然而,正如MSDN文档所描述的那样,如果任何一个值是空的,那么操作总是解析为 False
这意味着,如果一个值在 firstTimestamp
和 secondTimestamp
为空,则返回空,其中 firstTimestamp
应该被返回。
有没有一种有效的捷径来进行这种比较,并考虑到空值?我唯一能想到的解决方案是这样的。
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
,它返回一个值,大于 0
反之亦然。然后你可以在 条件运算符 ?:
以获得预期的结果。