You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用List.Sort()触发NullReferenceException的原因排查

问题原因分析

你的代码触发NullReferenceException的核心原因是比较器违反了List.Sort的契约要求:

  • .NET的List.Sort使用的排序算法(如快速排序变种)要求比较器必须严格遵循全序关系规则,其中关键一条是:当两个元素逻辑相等时,比较器必须返回0。
  • 你的代码中,当两个Student的grade和age都相等时(也就是你循环添加的所有实例的情况,因为都是age=0, grade=0的对象),比较器返回的是-1而非0。这种违规会导致排序算法内部逻辑混乱,出现未定义行为,最终向比较器传入null的A或B参数,触发空引用异常。
修复方案

修改比较器,在两个学生的grade和age都相等时返回0:

list.Sort(delegate (Student A, Student B)
{
    if (A.grade > B.grade)
        return 1;
    else if (A.grade < B.grade)
        return -1;
    else
    {
        if (A.age > B.age)
            return 1;
        else if (A.age < B.age)
            return -1;
        else
            return 0; // 相等时返回0,符合排序契约
    }
});

内容的提问来源于stack exchange,提问作者seonguk.jeon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 18:42:32