我有一个对象列表: List<FakeObject> list = ...
每个对象都有一个DateTime属性,我们称之为"Date"
我想按此日期属性按降序排序此列表.但是,当我尝试
list.Sort(new Comparison<FakeObject>((x, y) => DateTime.Compare(x.Date, y.Date)))
它抱怨,因为Date属性可以为空.
如何对此列表进行排序,将可空日期视为MAX DATE,将其显示在顶部?对我来说,快速简单的替代方法是不要使Date字段可以为空,但让我们假设现在不是一个选项.
简而言之:如果DateTime可以为null,我如何按DateTime对对象列表进行排序?
Mik*_*oud 14
一种可能的方法可能是:
list.Sort(new Comparison<FakeObject>((x, y) =>
-DateTime.Compare(x.Date ?? DateTime.MaxValue,
y.Date ?? DateTime.MaxValue)));
Run Code Online (Sandbox Code Playgroud)
更新:修改MaxDate后使用OP编辑问题进行澄清.
请注意,您可以这样做(MinDate或MaxDate).最重要的是,如果它null然后给它一些静态值,以实现你想要的.
如果要将所有空日期转换为最大日期值,请在函数中执行此操作.您可以使用null coalesce运算符为此更简洁的语法:
list.Sort((x, y) =>
DateTime.Compare(x.Date ?? DateTime.MaxValue, y.Date ?? DateTime.MaxValue))
Run Code Online (Sandbox Code Playgroud)
如果您可以替换列表,而不是就地修改它,您可以使用 LINQ。
list = list.OrderByDescending(x => x.Date ?? DateTime.MaxValue).ToList();
Run Code Online (Sandbox Code Playgroud)