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

如何按继承类的DateTime属性对List<Measurement>进行排序?

问题:按不同派生类的特定字段对List降序排序

场景与代码定义

现有基类Measurement及两个派生类:

class Measurement {
   public DateTime TimeStamp { get; set; }
}

class AdditionalMeasurement : Measurement {
   public DateTime PurchaseDate { get; set; }
}

class SpecialMeasurement: Measurement {
   public DateTime PrescriptionDate { get; set; }
}

需求

对List<Measurement>进行降序排序:

  • 默认(其他派生类)按Measurement.TimeStamp排序
  • 若为AdditionalMeasurement类型,按PurchaseDate排序
  • 若为SpecialMeasurement类型,按PrescriptionDate排序

尝试的代码(逻辑正确但无法正常运行)

List<Measurement> measurements = new List<Measurement>() { ... };
measurements.OrderByDescending(m =>
{
    if (m is AdditionalMeasurement additionalMeasurement)
    {
        return additionalMeasurement.PurchaseDate;
    }
    else if (m is SpecialMeasurement specialMeasurement)
    {
        return specialMeasurement.PrescriptionDate;
    }
    else
    {
        return m.TimeStamp;
    }
});

解决方案

方法1:使用Linq的OrderByDescending(返回新列表)

你的代码逻辑本身是正确的,但OrderByDescending不会修改原列表,而是返回一个排序后的IEnumerable<Measurement>,需要将结果转为List并接收:

List<Measurement> measurements = new List<Measurement>() { ... };
// 接收排序后的新列表
var sortedMeasurements = measurements.OrderByDescending(m =>
{
    if (m is AdditionalMeasurement am)
    {
        return am.PurchaseDate;
    }
    else if (m is SpecialMeasurement sm)
    {
        return sm.PrescriptionDate;
    }
    else
    {
        return m.TimeStamp;
    }
}).ToList();

方法2:使用List.Sort(原地排序)

如果希望直接修改原列表、无需创建创建新列表,可以用List<T>.Sort方法,自定义比较逻辑:

List<Measurement> measurements = new List<Measurement>() { ... };
measurements.Sort((x, y) =>
{
    // 提取当前对象用于排序的日期
    DateTime GetSortDate(Measurement m)
    {
        return m switch
        {
            AdditionalMeasurement am => am.PurchaseDate,
            SpecialMeasurement sm => sm.PrescriptionDate,
            _ => m.TimeStamp
        };
    }

    // 降序排序:用y的日期和x的日期比较
    return GetSortDate(y).CompareTo(GetSortDate(x));
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 07:37:02