You need to enable JavaScript to run this app. C#中含null的可空DateTime列表如何按日期升序、null值排末尾
优惠活动
大模型
产品
解决方案
定价
更多

C#中含null的可空DateTime列表如何按日期升序、null值排末尾

C# 可空DateTime列表排序实现(null值排末尾)

原有写法的问题

  • 第一种默认a.CompareTo(b)写法:C# 可空值类型的默认比较逻辑会将null视为小于任何非null值,排序后所有null会出现在列表最前,不符合要求
  • 第二种只比较HasValue的写法:仅判断了是否有值,完全没有对日期本身做对比,无法实现日期升序效果

可行实现方案

方法1:使用LINQ方法(写法最简洁)

直接通过两次排序实现,先把非null值排到前面,再对非null值按日期升序,最终生成新的排序后列表:

var sortedList = allDateTimes
    .OrderBy(d => d.HasValue ? 0 : 1)
    .ThenBy(d => d)
    .ToList();

注:如果需要直接修改原列表,而不是生成新列表,可以使用第二种方法。

方法2:使用List.Sort自定义比较器(直接修改原列表)

自定义比较逻辑,明确处理null的排序优先级:

allDateTimes.Sort((a, b) =>
{
    // 两者都为null,视为相等
    if (!a.HasValue && !b.HasValue) return 0;
    // a为null,b不为null,a排在后面,返回1
    if (!a.HasValue) return 1;
    // b为null,a不为null,a排在前面,返回-1
    if (!b.HasValue) return -1;
    // 都有值时按日期升序比较
    return a.Value.CompareTo(b.Value);
});

补充注意:你示例代码里的Null为笔误,C# 中可空类型的空值标识为小写的null。


内容的提问来源于stack exchange,提问作者Adam Lundberg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 12:06:05