using System; using System.Collections; using System.Collections.Generic; public class Test { public static void Main() { List list = new List() { new Person("Adrian", "Abramowicz"), new Person("Krzysiek", "Abramowicz"), new Person("Krzysiek", "Kowalski"), new Person("Marian", "Zawada") }; BubbleSort(list); foreach(Person p in list) Console.WriteLine(p.Surname + " " + p.Name); } public static void BubbleSort(List list) { for (int i = 0; i < list.Count; i++) { for (int j = 0; j < list.Count - 1; j++) { if (list[j] > list[j+1]) { Person temp = list[j]; list[j] = list[j+1]; list[j+1] = temp; } } } } } public class Person : IComparable, IComparable { public Person(string name, string surname) { Name = name; Surname = surname; } public string Name {get; private set;} public string Surname {get; private set;} public override int GetHashCode() { return Name.GetHashCode() ^ Surname.GetHashCode(); } public override bool Equals(Object obj) { Person other = obj as Person; return Equals(other); } public bool Equals(Person other) { if (object.ReferenceEquals(other, null)) return false; if (!Surname.Equals(other.Surname)) return false; if (!Name.Equals(other.Name)) return false; return true; } public int CompareTo(object obj) { Person other = obj as Person; return CompareTo(other); } public int CompareTo(Person other) { if (object.ReferenceEquals(other, null)) return 1; int result = string.Compare(this.Surname, other.Surname, StringComparison.OrdinalIgnoreCase); if (result == 0) result = string.Compare(this.Name, other.Name, StringComparison.OrdinalIgnoreCase); return result; } public static int Compare(Person left, Person right) { if (object.ReferenceEquals(left, right)) return 0; if (object.ReferenceEquals(left, null)) return -1; int result = string.Compare(left.Surname, right.Surname, StringComparison.OrdinalIgnoreCase); if (result == 0) result = string.Compare(left.Name, right.Name, StringComparison.OrdinalIgnoreCase); return result; } public static bool operator < (Person left, Person right) { return (Compare(left, right) < 0); } public static bool operator > (Person left, Person right) { return (Compare(left, right) > 0); } }