C# 如何按dateTime元素对自定义数组列表进行排序

C# 如何按dateTime元素对自定义数组列表进行排序,c#,datetime,sorting,arraylist,C#,Datetime,Sorting,Arraylist,我有一个带有类实例的ArrayList(在本例中为“loan”)。此贷款类包含一个变量“date”。我想按这些日期变量以最佳方式对ArrayList进行排序 我以前进行日期排序的方法是使用列表。但在本例中,我希望对列表/数组列表进行排序,保留其余信息,以便所有信息都可以在其他地方使用您可以使用System.Linq.Enumerable扩展方法Cast和OrderBy,用于此: ArrayList list; List<Loan> loanes = ( from loan

我有一个带有类实例的ArrayList(在本例中为“loan”)。此贷款类包含一个变量“date”。我想按这些日期变量以最佳方式对ArrayList进行排序


我以前进行日期排序的方法是使用
列表
。但在本例中,我希望对列表/数组列表进行排序,保留其余信息,以便所有信息都可以在其他地方使用

您可以使用
System.Linq.Enumerable
扩展方法
Cast
OrderBy
,用于此:

ArrayList list;

List<Loan> loanes = (
    from loan in list.Cast<Loan>()
    orderby loan.Date
    select loan).ToList();
ArrayList列表;
列表贷款=(
来自list.Cast()中的贷款
orderby loan.日期
选择loan.ToList();

您需要制作一个
IComparer
,返回
x.Date.CompareTo(y.Date)

Slaks所说的基本上是在ArrayList中进行排序您需要一个自定义IComparer实现,我在下面给出了一个示例:

public class Loan
{
    public DateTime date { get; set; }

}

public class LoanComparer : IComparer
{
    public int Compare(object x, object y)
    {
        Loan loanX = x as Loan;
        Loan loanY = y as Loan;

        return loanX.date.CompareTo(loanY.date);
    }
}


static void Main(string[] args)
{
    Loan l1 = new Loan() {date = DateTime.Now};
    Loan l2 = new Loan() { date = DateTime.Now.AddDays(-5) };

    ArrayList loans = new ArrayList();
    loans.Add(l1);
    loans.Add(l2);


    loans.Sort(new LoanComparer());
}

注意:如果您混合使用本地日期和UTC日期,它将按原始时间排序,而不进行时区转换。调用结果
sortedList
会产生误导,因为它是(有序的)可枚举列表,而不是列表。