Csharp/C Sharp/Generics/IComparable
Implements IComparable<T>
<source lang="csharp">
using System; using System.Collections.Generic; public class Book : IComparable<Book> {
private string name; private int circulation; private class AscendingCirculationComparer : IComparer<Book> { public int Compare(Book x, Book y) { if (x == null && y == null) return 0; else if (x == null) return -1; else if (y == null) return 1; if (x == y) return 0; return x.circulation - y.circulation; } } public Book(string name, int circulation) { this.name = name; this.circulation = circulation; } public static IComparer<Book> CirculationSorter { get { return new AscendingCirculationComparer(); } } public override string ToString() { return string.Format("{0}: Circulation = {1}", name, circulation); } public int CompareTo(Book other) { if (other == null) return 1; if (other == this) return 0; return string.rupare(this.name, other.name, true); }
} public class MainClass {
public static void Main() { List<Book> Books = new List<Book>(); Books.Add(new Book("E", 1)); Books.Add(new Book("T", 5)); Books.Add(new Book("G", 2)); Books.Add(new Book("S", 8)); Books.Add(new Book("H", 5)); foreach (Book n in Books) { Console.WriteLine(" " + n); } Books.Sort(); foreach (Book n in Books) { Console.WriteLine(" " + n); } Books.Sort(Book.CirculationSorter); foreach (Book n in Books) { Console.WriteLine(" " + n); } }
}
</source>