我有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());
}
然后我创建了一个包含10个A
s(A[] a = new A[10]
)的数组,并将a[0]
设置为随机A
。
Array.sort(a)
的结果为:a[0..8]
为null
,a[9]
为随机A
。我该怎么做才能正确排序数组? (a[0]
必须是随机A
)。谢谢大家。
答案 0 :(得分:0)
首先,您可以删除第一个比较(除非您确实需要进行优化比较)。如果as Invoice
不是inv
类型,则obj
会导致Invoice
为空。考虑任何可能的性能损失,增加代码可维护性。
其次,您可以利用结果不必为-1,0,1但小于零,零和大于零来表示优先级。在这种情况下,从比较实例中减去实例将产生有效结果。
以下函数将导致任何非发票或空对象之前的实例,否则它将在具有更大发票金额的发票之前。
int IComparable.CompareTo(object obj)
{
Invioce inv = obj as Invioce;
return (inv == null) ? -1 : GetInvoiceAmount() - inv.GetInvoiceAmount();
}