问一个关于比较的问题
											PersonComparerName.cs 程序代码:
程序代码:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace Ch11020204
{
    class PersonComparerName:IComparer
    {
        public static IComparer Default = new PersonComparerName();
        public int Compare(object x, object y) {
            if (x is Person && y is Person)
            {
                return Comparer.(((Person)x).Name, ((Person)y).Name);
            }
            else {
                throw new ArgumentException("One or both object to compare are not person objects.");
            }
        }
    }
}
Person.cs
 程序代码:
程序代码:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
namespace Ch11020204
{
    class Person:IComparable
    {
        public string Name;
        public int Age;
        public Person(string name, int age) {
            Name = name;
            Age = age;
        }
        public int CompareTo(object obj) {
            if (obj is Person)
            {
                Person otherPerson = obj as Person; //据我的理解obj,就是this,obj和Person都是引用类型,那么otherPerson的值被浅拷贝到otherPerson中,otherPerson的值和this的值应该是一样的. 但事实并不是这样,弄不明白为什么
                Debug.WriteLine("this.age:{0} , other.age:{1}", this.Age, otherPerson.Age);
                return this.Age - otherPerson.Age;
            }
            else {
                throw new ArgumentException("Object to compare to is not a person object.");
            }
        }
    }
}
Program.cs
 程序代码:
程序代码:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace Ch11020204
{
    class Program
    {
        static void Main(string[] args)
        {
            ArrayList list = new ArrayList();
            list.Add(new Person("Jim", 30));
            list.Add(new Person("Bob", 25));
            list.Add(new Person("Bert", 27));
            list.Add(new Person("Ernie", 22));
            Console.WriteLine("Unsorted people:");
            for (int i = 0; i < list.Count; i++) {
                Console.WriteLine("{0} ({1})", (list[i] as Person).Name, (list[i] as Person).Age);
            }
            Console.WriteLine();
            Console.WriteLine("People sorted with default comparer (by age):");
            list.Sort();
            for (int i = 0; i < list.Count; i++) {
                Console.WriteLine("{0} ({1})", (list[i] as Person).Name, (list[i] as Person).Age);
            }
            Console.WriteLine();
            Console.WriteLine("People sorted with nondefault comparer (by name):");
            list.Sort(PersonComparerName.Default);
            for (int i = 0; i < list.Count; i++) {
                Console.WriteLine("{0} ({1})", (list[i] as Person).Name, (list[i] as Person).Age);
            }
            Console.ReadKey();
        }
    }
}

 
											





 
	    