首先定义一个Book类:
namespace ArrayListSort

...{
class Book:IComparable<Book>

...{
private string _bookname;
private string _bookcategory;
public double _price;

public string BookName

...{

get ...{ return _bookname; }

set ...{ _bookname = value; }
}
public string BookCategory

...{

get ...{ return _bookcategory; }

set ...{ _bookcategory = value; }
}
public double Price

...{

get ...{ return _price; }

set ...{ _price = value; }
}

public Book(string bookname, string bookcategory, double price)

...{
_bookname = bookname;
_bookcategory = bookcategory;
_price = price;
}


IComparable 成员#region IComparable<Book> 成员

public int CompareTo(Book other)

...{
return (BookName.CompareTo(other.BookName));
}

#endregion
}
}
以下定自定义排序类PriceDownClass来实现IComparer
namespace ArrayListSort

...{
class PriceDownClass:IComparer<Book>

...{

IComparer 成员#region IComparer<Book> 成员

public int Compare(Book x, Book y)


...{
if (y.Price > x.Price)
return 1;
else if (y.Price == x.Price)
return 0;
else
return -1;
//throw new Exception("The method or operation is not implemented.");
}

#endregion
}
}
以下定自定义排序类PriceDownClass来实现IComparer
namespace ArrayListSort

...{
class PriceCompare : IComparer

...{


IComparer 成员#region IComparer<Book> 成员

public int Compare(object x, object y)

...{
double i = ((Book)y).Price - ((Book)x).Price;
// double i = y.Price - x.Price;

if ( i>0)

return 1;
else if (i==0)
return 0;
else
return -1;
}

#endregion
}
}
以下为整个程序的唯一入口:
namespace ArrayListSort

...{
class Program

...{
static void Main(string[] args)

...{


Book[] books = new Book[8] ...{ new Book("C#书籍z", "C#", 45.5), new Book("C#书籍f", "C#", 55.8) ,
new Book("Delphi书籍1","Delphi",78),new Book("C#书籍x", "C#", 55.9),
new Book("Asp.net", "Asp.net", 55.8),new Book("Delphi书籍2","Delphi",79),
new Book("C#书籍y", "C#", 60),new Book("C#书籍b", "C#", 80)
};

ArrayList a1 = new ArrayList(books);//以books数组为参数构造ArrayList实例 a1;
Console.WriteLine("Array_排序前的集合排列:");
DisplayResult(books);
Console.WriteLine();

Array.Sort(books);
Console.WriteLine("Array_按书籍名称排序后:");//Book类已经实现了IComparable接口
DisplayResult(books);
Console.WriteLine();

Array.Sort(books, new PriceDownClass());
Console.WriteLine("Array_按书籍价格降价排序后:");
DisplayResult(books);
Console.WriteLine();

//a1.Sort();//Book类已经实现了IComparable接口,但不能实现排序
//a1.Sort(new PriceDownClass());//Array情况下可以排序,不知为什么ArrayList情况下就不行了??

/**//*
更改自定义排序类 public int Compare(Book x, Book y) 改为 public int Compare(object x, object y)
就可以了在ArrayList的自定义排序中应用,更改后的自定义排序类也可用天Array的Sort()方法
*/
a1.Sort(new PriceCompare());
Console.WriteLine("ArrayList_按书籍价格降价排序后:");
DisplayResult(a1);
Console.WriteLine();

Array.Sort(books, new PriceCompare());//
DisplayResult(books);
}


static void DisplayResult(Book[] al) ...{
foreach (Book book in al)

...{
Console.WriteLine("书名:{0} 价格:{1} ", book.BookName, book.Price);
}
}

static void DisplayResult(ArrayList al)

...{
foreach (Book book in al)

...{
Console.WriteLine("书名:{0} 价格:{1} ", book.BookName, book.Price);
}
}
}
}

Array和ArrayList在自定义排序类中的区别从上例中可以看出, 对于集合元素为引用类型时,类中实现了IComperable接口,在Array中可直接进行缺省排序Array.Sort(books),但a1.Sort() 不能实现排序;自定义排序类中实现泛型接口时如果确定IComparer<T>的T类型,则此自定义排序类不能用于ArrayList中实现排序.