如何在C#中对通用列表进行排序并允许NULL项首先出现在列表中?

JC *_*bbs 3 c# generics comparison

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

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

var things = new List<Thing>();
Run Code Online (Sandbox Code Playgroud)

现在我想打电话:

thing.Sort((t1, t2) => t1.EditDate.CompareTo(t2.EditDate));
Run Code Online (Sandbox Code Playgroud)

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

Jef*_*tes 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);
});
Run Code Online (Sandbox Code Playgroud)

EndDate不能null因为它是一种价值类型.但是,如果你有一个EndDate你认为的特定值null,你可以修改上面的代码,以与我应对t1t2存在的方式类似的方式考虑到这一点null.