SortedSet 一问解决思路

SortedSet 一问
大家看看下面的code,觉得执行结果是什么?

class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }

        public Person(string name, int age)
        {
            Name = name;
            Age = age;
        }

        public override string ToString()
        {
            return string.Format("Name:{0},Age:{1}", Name, Age);
        }
    }

    class SortPersonByAge:IComparer<Person>
    {
        public int Compare(Person x, Person y)
        {
            if (x.Age > y.Age)
            {
                return 1;
            }
            else if(x.Age<y.Age)
            {
                return -1;
            }
            else
            {
                return 0;
            }
        }
    }


SortedSet<Person> persons = new SortedSet<Person>(new SortPersonByAge())
            {
                new Person("Tom",25),
                new Person("Tommy",15),
                new Person("Jeffrey",21),
                new Person("Oscar",25),
            };

            foreach (var person in persons)
            {
                Console.WriteLine(person.ToString());
            }

            persons.Add(new Person("Erosion", 25));
            Console.WriteLine();

            foreach (var person in persons)
            {
                Console.WriteLine(person.ToString());
            }


如果你的答案是下面这个,麻烦帮忙解释以下。

Name:Tommy,Age:15
Name:Jeffrey,Age:21
Name:Tom,Age:25

Name:Tommy,Age:15
Name:Jeffrey,Age:21
Name:Tom,Age:25
Press any key to continue . . .

------解决方案--------------------
因为SortedSet不接受重复的元素,那元素是否重复呢?就是看你传入的IComparer,由于最先加到集合里的年龄为25的Person是Tom,所以以后再往里添加的元素都加不进去了。
你可以把persons.Add(new Person("Erosion", 25));改为
bool b = persons.Add(new Person("Erosion", 25));
输出b可以看到它的值为False。