using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;namespaceDemo3
{classProgram{staticvoidMain(string[] args){//新建集合people用來存放person實例ArrayList people = new ArrayList();//建立4個person實例Person person1 = new Person("Jone", 18);Person person2 = new Person("Tom", 20);Person person3 = new Person("Lily", 15);Person person4 = new Person("July", 25);//將實例添加到people集合中people.Add(person1);people.Add(person2);people.Add(person3);people.Add(person4);//輸出原來序列Console.WriteLine("原來序列:");foreach (Person person in people){Console.WriteLine("person name: {0} age:{1}", person.Name, person.Age);}//用實現Icomparable進行排序people.Sort();//用實現Icomparable的方法輸出排序后的序列Console.WriteLine("按年齡排序后的序列:");foreach (Person person in people){Console.WriteLine("person name: {0} age:{1}", person.Name, person.Age);}//用實現Icomparer的方法進行排序people.Sort(PersonComparer.Default);//用實現Icomparer的方法輸出排序后的序列Console.WriteLine("按名稱排序后的序列:");foreach (Person person in people){Console.WriteLine("person name: {0} age:{1}", person.Name, person.Age);}Console.ReadKey();}}publicclassPerson : IComparable{///<summary>/// 兩個私有字段:/// 人物姓名;/// 人物年齡;///</summary>privatestring name;privateint age;///<summary>/// 構造函數///</summary>publicPerson(string myname, int myage){name = myname;age = myage;}///<summary>/// 兩個共有屬性:/// 分別對應兩個私有字段;///</summary>publicstring Name{set{name = value;}get{return name;}}publicint Age{set{age = value;}get{return age;}}publicintCompareTo(object myobject){if (myobject is Person)//用is運算符判斷要比較的對象是否是Person對象{//如果是用as運算符進行對象轉換,返回年齡比較結果(一個整數,表示兩者差)Person myperson = myobject as Person;returnthis.Age - myperson.Age;//return myperson.Age - this.Age;}else{//如果不是,拋出異常thrownew ArgumentException("Object to compare to is not a Person Object");}}}publicclassPersonComparer : IComparer{//靜態字段,方便使用,沒有也可,調用方法會變publicstatic IComparer Default = new PersonComparer();publicintCompare(object myperson1, object myperson2){//用is運算符判斷要比較的對象是否都是Person對象if (myperson1 is Person && myperson2 is Person){//如果是,調用.Net Framework已經實現好的能比較基本類型的函數:Comparer.Default.Compare//(要用using System.Collections;)return Comparer.Default.Compare(((Person)myperson1).Name, ((Person)myperson2).Name);}else{//如果不是拋出異常thrownew ArgumentException("One or both objects to compare are not Person objects.");}}}
}