标题:问一个关于比较的问题
只看楼主
q332010372
Rank: 2
等 级:论坛游民
帖 子:52
专家分:61
注 册:2010-7-27
结帖率:44.44%
已结贴  问题点数:20 回复次数:1 
问一个关于比较的问题
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();

        }
    }
}


2011-10-01 16:24
serious
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:81
专家分:497
注 册:2009-8-18
得分:14 
当你写"(b)"时,"a"是"this",和"b"是"obj",因此"this"和"obj"不是一样的.

2011-10-02 00:43



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-351412-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.091283 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved