当我编写此代码时,我在Sort()方法上出错。
ArrayList al = new ArrayList();
al.Add("I");
al.Add("am");
al.Add(27);
al.Add("years old");
foreach (object o in al)
{
Console.Write("{0} ", o.ToString());
}
al.Sort();
Console.WriteLine();
foreach (object o in al)
{
Console.Write("{0} ", o.ToString());
}
好吧,我可以理解排序方法失败了,因为我在集合中包含了字符串和整数。
但是当我拥有所有字符串或所有整数时,它不会出错。它排序非常好。
答案 0 :(得分:2)
它使用Object的compareTo。在compareTo中,对象将检查比较对象的类型,并在此处产生错误:
字符串:IComparable
public int compareTo(Object s) {
if (!(s is String)) {
throws new Exception();
}
//do the job
}
数组的排序方法将循环遍历数组的元素,并在每个元素上调用compareTo方法以与其他元素进行比较
我还建议您使用泛型,这样您就不会在意外地将不同类型的对象放入其中。使用ArrayList<String>
答案 1 :(得分:0)
您可以使用委托创建自定义排序。下面,它是基于Address.AddressId
对地址的自定义列表进行排序// sort list in descending order
addressList.Sort(delegate(Address a1, Address a2) { return a2.AddressId.CompareTo(a1.AddressId); });
您可以为此创建任何类型的逻辑,甚至可以将两个参数委托为对象,然后测试它们的类型,并根据它进行比较。