C# 数组排序不正确

C# 数组排序不正确,c#,C#,我有一个类A。在这个类中,我编写了一个比较方法,如下所示: int IComparable.CompareTo(object obj) { if (obj == null) return -1; Invioce inv = obj as Invioce; if (inv == null) return -1; if ((GetInvoiceAmount() < inv.GetInvoiceAmount()))

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

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());
}
int-IComparable.CompareTo(对象对象对象)
{ 
if(obj==null)
返回-1;
Invioce inv=obj作为Invioce;
如果(inv==null)
返回-1;
如果((GetInvoiceAmount()inv.GetInvoiceAmount());
}
然后我创建了一个包含10个
A
s(
A[]A=newa[10]
)的数组,并将
A[0]
设置为随机
A

Array.sort(a)
的结果是:
a[0..8]
null
a[9]
为随机
a
。如何才能正确排序数组?(
a[0]
必须是随机的
a
)。谢谢大家。

首先,您可以删除第一个比较(除非您确实需要优化比较)<如果
obj
不是
Invoice
类型,则代码>作为发票将导致
inv
为空。考虑任何可能的性能损失:代码可维护性的增加。

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

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

int IComparable.CompareTo(object obj)
{ 
    Invioce inv = obj as Invioce;
    return (inv == null) ? -1 : GetInvoiceAmount() - inv.GetInvoiceAmount();
}

您是否知道,您的代码可以替换为
新的A[10].OrderBy(inv=>inv.GetInvoiceAmount())
?这就行了。我还发现,使用
Convert.ToInt32将
bool
转换为
ToInt32
会混淆该行的含义。很难理解。