Csharp/C Sharp/Generics/IComparable — различия между версиями
Admin (обсуждение | вклад) м (1 версия) |
Admin (обсуждение | вклад) м (1 версия) |
(нет различий)
|
Текущая версия на 11:45, 26 мая 2010
Implements IComparable<T>
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);
}
}
}