3

我在 C# 中有一个通用的对象列表,例如,这就是对象可能是什么。

public class Thing {
    public string Name { get; set; }
    public DateTime EditDate { get; set; }
}

var things = new List<Thing>();

现在我想打电话:

thing.Sort((t1, t2) => t1.EditDate.CompareTo(t2.EditDate));

但是,我的一些 EditDate 属性为空。我希望这些具有 null EditDate 属性的对象显示在我的列表顶部(即更接近零索引)。我怎样才能做到这一点?

4

4 回答 4

14

您可以创建一个更复杂的 lambda,例如:

things.Sort((t1, t2) => 
{
 if (t1 == null)
 {
   return (t2 == null) ? 0 : -1;
 }
 if (t2 == null)
 {
   return 1;
 }
 return t1.EditDate.CompareTo(t2.EditDate);
});

EndDate不能null,因为它是一种值类型。EndDate但是,如果你有一个你认为的特定值null,你可以修改上面的代码,以类似于我如何处理t1t2存在的方式将其考虑在内null

于 2008-11-25T17:05:51.603 回答
2

让 Thing 实现 IComparable 以使具有 null editDates 的事物的顺序高于具有编辑日期的事物。然后修改排序表达式以对对象而不是编辑日期进行排序。

于 2008-11-25T17:07:53.223 回答
0

List 有一个接受委托的排序函数

现在我已经阅读了这个问题

TheList.Sort(int delegate(Type a, Type b)
{
    if (a.memeber == null) return -1;
    if (b.memeber == null) return 1;
    if (a.memeber<b.memeber) return -1;
    if (b.memeber<a.memeber) return 1;
    return 0;
}
于 2008-11-25T17:02:12.877 回答
0

ffpf 的答案应该有效。

但是,如果您有时间阅读这篇关于 BCL 团队的空值排序的精彩文章

http://blogs.msdn.com/bclteam/archive/2008/10/06/the-compare-contract-kim-hamilton.aspx

于 2008-11-25T17:14:03.663 回答