C# 数组排序不正确
我有一个类A。在这个类中,我编写了一个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()))
比较方法,如下所示:
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
会混淆该行的含义。很难理解。