using System; using System.Collections; class Album : IComparable, ICloneable { private string _Title; private string _Artist; public Album(string artist, string title) { _Artist = artist; _Title = title; } public string Title { get { return _Title; } set { _Title = value; } } public string Artist { get { return _Artist; } set { _Artist = value; } } public override string ToString() { return _Artist + ",t" + _Title; } public int CompareTo(object o) { Album other = o as Album; if (other == null) throw new ArgumentException(); if (_Artist != other._Artist) return _Artist.CompareTo(other._Artist); else return _Title.CompareTo(other._Title); } public object Clone() { return new Album(_Artist, _Title); } } class TitleComparer : IComparer { public int Compare(object l, object r) { Album left = l as Album; Album right = r as Album; if ((left == null) || (right == null)) throw new ArgumentException(); if (left.Title != right.Title) return left.Title.CompareTo(right.Title); else return left.Artist.CompareTo(right.Artist); } } class Class1 { static void Main(string[] args) { ArrayList arr = new ArrayList(); arr.Add(new Album("G", "A")); arr.Add(new Album("B", "G")); arr.Add(new Album("S", "A")); arr.Sort(); try { foreach (Album a in arr) { Console.WriteLine(a); } } catch (System.InvalidCastException e) { } arr.Sort(new TitleComparer()); foreach (Album a in arr) { Console.WriteLine(a); } Album l = new Album("L", "G"); arr.Sort(); int index = arr.BinarySearch(l); Console.WriteLine(index.ToString()); arr.Sort(new TitleComparer()); index = arr.BinarySearch(l, new TitleComparer()); Console.WriteLine(index.ToString()); } } //csharp/7675