C#Help:在C#中对对象列表进行排序

可能重复:
使用预定义的排序值列表对对象排序
C#Help:在C#中对对象列表进行排序

双重post

在C#中对对象列表进行排序

public class CarSpecs { public CarSpecs() { } private String _CarName; public String CarName { get { return _CarName; } set { _CarName = value; } } private String _CarMaker; public String CarMaker { get { return _CarMaker;} set { _CarMaker = value; } } private DateTime _CreationDate; public DateTime CreationDate { get { return _CreationDate; } set { _CreationDate = value; } } } 

这是一个列表,我试图找出一种有效的方法来排序List CarList ,包含6个(或任何整数)汽车,按汽车生产日期。 我打算做冒泡排序,但那会有用吗? 任何帮助?

谢谢

 CarList = CarList.OrderBy( x => x.CreationDate ).ToList(); 

首先,使用.Net 3.5中引入的简写语法,可以使这个类定义更短:

 public class CarSpecs { public CarSpecs() { } public String CarName { get; set; public String CarMaker { get; set; } public DateTime CreationDate { get; set; } } 

这将编译成与上面完全相同的类。

其次,您可以使用Lambda表达式或LINQ轻松地对它们进行排序:

 var linq = (from CarSpecs c in CarList orderby c.CreationDate ascending select c) as List; var lambda = CarList.OrderBy(c => c.CreationDate).ToList(); 

不要编写自己的排序算法。 .NET有一个Array.Sort()方法专门用于这样的事情。

由于您有自定义对象,因此需要定义如何比较2个对象,以便排序算法知道如何对它们进行排序。 你可以这两种方式之一:

  1. 使您的CarSpecs类实现IComparable接口
  2. 创建一个实现IComparer的类,并将其作为参数传递给Array.Sort()以及您的数组。

BCL中已存在排序算法 – Array.Sort()和List.Sort()。 实现一个IComparer类,使用CreationDate确定排序顺序,然后将所有对象放入数组或列表中,并调用相应的Sort()方法