0

我有 A 类。在这个类中,我编写了一个CompareTo方法,如下所示:

int IComparable.CompareTo(object obj)
{ 
    if (obj == null)
        return -1;
    Invioce inv = obj as Invioce;
    if (inv == null)
        return -1;
    if ((GetInvoiceAmount() < inv.GetInvoiceAmount()))
        return -1;
    return Convert.ToInt32(GetInvoiceAmount() > inv.GetInvoiceAmount());
}

A然后我创建了一个 10 s ( )的数组A[] a = new A[10],并将其设置a[0]为随机数A。结果Array.sort(a)是:a[0..8]null并且a[9]是随机的A。我该怎么做才能正确排序数组?(a[0]必须是随机的A)。谢谢大家。

4

1 回答 1

0

首先,您可以删除第一个比较(除非您确实需要进行优化比较)。 如果不是 type as Invoice,将导致inv为 null 。将任何可能的性能损失视为代码可维护性的增益。objInvoice

其次,您可以利用结果不必是 -1、0、1,而是小于零、零和大于零来表示优先级。在这种情况下,从比较实例中减去实例将产生有效结果。

以下函数将导致实例位于任何非发票或空对象之前,否则它将位于具有更大发票金额的发票之前。

int IComparable.CompareTo(object obj)
{ 
    Invioce inv = obj as Invioce;
    return (inv == null) ? -1 : GetInvoiceAmount() - inv.GetInvoiceAmount();
}
于 2013-11-10T21:03:55.880 回答