使用DateTime对C# ArrayList进行排序

4

我有一个包含以下字段的 C# ArrayList 对象。这个 ArrayList 中大约有 10 个对象。我的问题是,我需要根据系统中的可用 StartDate(一个 DateTime 变量)对 ArrayList 进行排序。

public int id { get; set; }
public string title {get; set;}
public bool allDay { get; set; }
public string start { get; set; }
public string end { get; set; }
public string color { get; set; }
public DateTime startDate { get; set; }
public DateTime endDate { get; set; }
public string Location { get; set; }
public string StartDatestr { get; set; }
public string EndDatestr { get; set; }
public string StartTime { get; set; }
public string EndTime { get; set; }
public bool Alert { get; set; }
public bool Repeat { get; set; }
public Int32 RepeatDays { get; set; }
public Int32 CalendarID { get; set; }
public int CustomerNo { get; set; }
public string CustomerName { get; set; }
public bool IsProspect { get; set; }
public string Description { get; set; }

请问有人能给我解惑吗?我尝试使用.Sort(),但它似乎并没有起到排序的作用(在我所知道的情况下,对于包含对象的ArrayList进行排序是无效的)。

提前感谢您的帮助。

更新:

List<Appointment> appointments = new List<Appointment>();

我已经按照上述方式创建了List,现在我可以对其进行排序吗?

5
除非你在使用1.1版本的Java,否则你真的需要使用ArrayList吗?难道不能使用List<yourclass>吗? - V4Vendetta
我更新了问题,您能否检查一下? - Jay Mayu
1
var sortedList = appointments.OrderBy(a=>a.startDate).ToList(); - L.B
我已经回答了,请查看我的答案中的OR选项,您可以使用“OrderBy”来实现它。 - Pranay Rana
2个回答

6
尝试通过创建以下类似的比较器来实现:
public class ComparerDateTime : IComparer
{
    public int Compare(object x, object y)
    {
        MYCLASS X = x as MYCLASS;
        MYCLASS Y = y as MYCLASS;

        return X.date.CompareTo(Y.date);
    }
}

 MYCLASSList.Sort(new ComparerDateTime ());

或者

如果您创建了一个通用集合,您可以这样做。

尝试使用Enumerable.OrderBy操作,它会为您完成工作。您需要包含linq。

IEnumerable<Pet> query = arrayList .OrderBy(x=> x.startDate );

如果列表是以下的方式创建的,则尝试使用 LINQ 选项。
List<MYCLASS> arrayList  = new List<MYCLASS>();

1
这在仅使用非泛型的 ArrayList 上是行不通的。 - Jon Skeet
1
@MayuMayooresan - 我已经回答过了,检查一下我的答案中的OR选项,你可以使用“OrderBy”来实现。 - Pranay Rana
当我尝试使用OrderBy时,出现错误错误4:'System.Collections.Generic.List<Rah.BusinessEntities.Appointment>'不包含定义为'OrderBy'的内容,也没有接受类型为'System.Collections.Generic.List<Rah.BusinessEntities.Appointment>'的第一个参数的扩展方法'OrderBy'(您是否缺少using指令或程序集引用?) - Jay Mayu
1
@MayuMayooresan - 你需要添加名为 "using System.Linq;" 的 Linq 命名空间。 - Pranay Rana

1
你应该尝试将那组属性制作成一个单一的类,然后创建一个通用的List<NewClass>,你可以使用IComparableIComparer按特定字段进行排序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接