using System; using System.Collections.Generic; // Клас (назва_товару, код товару) public class Part : IEquatable, IComparable { public string Name { get; set;} public int Id { get; set;} public override string ToString() { return Id +": "+ Name;} public override bool Equals(object obj) { if (obj == null) return false; Part objAsPart = obj as Part; if (objAsPart == null) return false; else return Equals(objAsPart); } public int SortByNameAscending(string name1, string name2) { return name1.CompareTo(name2); } // Порівняння для типу Part як усталено public int CompareTo(Part comparePart) { if (comparePart == null) return 1; else return // порівняння номерів this.Id.CompareTo(comparePart.Id); } public override int GetHashCode() { return Id;} // Переозначає також оператори == і != public bool Equals (Part other) { if (other == null) return false; else return (this.Id.Equals(other.Id)); } } public class Example { public static void Main() { List parts = new List(); parts.Add(new Part() { Name = "цвяхи", Id = 1434}); parts.Add(new Part() { Name = "шурупи",Id = 1234}); parts.Add(new Part() { Name = "гайки", Id = 1634}); parts.Add(new Part() { Id = 1334 }); parts.Add(new Part() { Id = 1444, Name = "шайби"}); parts.Add(new Part() { Id = 1534, Name = "дюбелі"}); // Виведення даних списку з перевизначеним методом ToString Console.WriteLine("Перед упорядкуванням"); foreach (Part p in parts) Console.WriteLine(p); // Упорядкування списку зі стандартним порівнювачем, // яким є метод Compare, втілений у класі Part parts.Sort(); Console.WriteLine("\nПісля упорядкування за номером партії:"); foreach (Part p in parts) Console.WriteLine(p); // Виклик перевантаження Sort за допомогою // анонімного методу для делегату Comparison. parts.Sort(delegate(Part x, Part y) { if (x.Name == null && y.Name == null) return 0; else if (x.Name == null) return -1; else if (y.Name == null) return 1; else return x.Name.CompareTo(y.Name); }); Console.WriteLine("\nПісля упорядкування за назвою:"); foreach (Part p in parts) Console.WriteLine(p); } }