C# 用户定义的类列表错误“;无法比较数组中的两个元素;

C# 用户定义的类列表错误“;无法比较数组中的两个元素;,c#,list,sorting,C#,List,Sorting,我有一些代码,它获取由自定义类对象(称为付款)组成的列表,并按日期对它们进行排序,如下所示: payments.Sort(delegate(Payments p1, Payments p2) { return p1.GetDate().CompareTo(p2.GetDate()); }); GetDate()方法和付款类如下所示: public class Payments { public string Date { get; set; } public string P

我有一些代码,它获取由自定义类对象(称为付款)组成的列表,并按日期对它们进行排序,如下所示:

payments.Sort(delegate(Payments p1, Payments p2) { return p1.GetDate().CompareTo(p2.GetDate()); });
GetDate()方法和付款类如下所示:

public class Payments 
{
    public string Date { get; set; }
    public string Payment { get; set; }
    public string Reference { get; set; }
    public decimal Amount { get; set; }

    public DateTime GetDate()
    {
        return DateTime.Parse(this.Date);
    }
}

一旦列表被排序,我会手动检查每一个列表,并将其上的日期与下一个列表上的日期进行比较。如果它们不同,那么什么也不会发生,如果它们相同,那么我将付款中的数据合并到一个新的付款中。然后,我删除正在比较的两个付款,然后添加新的付款,然后重新使用列表并继续,直到列表按日期唯一为止

直到最近,这种方法一直运作良好,没有任何问题。但是,从今天起,出现了多个it错误案例,消息为“无法比较数组中的两个元素”

我已经到处找过了,但是我觉得我对什么可能导致它对我的代码进行舒适的更改了解得不够。有人能帮我理解是什么导致了这个问题,以及解决这个问题的最佳方法吗


谢谢

当使用Sort时,参数的类别必须是

公共类支付:i可比较
{
公共字符串日期{get;set;}
公共字符串支付{get;set;}
公共字符串引用{get;set;}
公共十进制数{get;set;}
公共国际比较(付款其他付款)
{
return DateTime.Parse(this.Date).ComapreTo(DateTime.Parse(otherPayment.Date));
}
}

您确定这是GetDate方法的正确版本吗?你把它作为一个扩展方法,但它并没有这样定义。是的,这是正确的,我对上面的帖子进行了编辑,以展示它在支付类中的地位。这是当每个人都知道.NET datetime类型在一年内不起作用时2014@jimminybob您是否检查了p1和p2中的日期值?@MarkoJuvančiči检查了添加日期,它们似乎显示了正确的日期,这两个日期都是今天的日期(2014年1月2日)不,如果他使用的是
List.Sort(
他也可以只是(OP使用的方法)
public class Payments : IComparable<Payments>
{
    public string Date { get; set; }
    public string Payment { get; set; }
    public string Reference { get; set; }
    public decimal Amount { get; set; }

    public int CompareTo(Payments otherPayment)
    {
       return DateTime.Parse(this.Date).ComapreTo(DateTime.Parse(otherPayment.Date));
    }
}