Получение исключения при попытке использовать метод расширения с SortedDictionary ... почему? - PullRequest
2 голосов
/ 11 мая 2010

Я пытаюсь поместить пользовательские объекты в отсортированный словарь ... Затем я пытаюсь использовать метод расширения (Max ()) для этого отсортированного словаря. Однако я получаю исключение: «По крайней мере, один объект должен реализовывать IComparable». Я не понимаю, почему я получаю это, поскольку мой пользовательский объект, очевидно, реализует IComparable. Вот мой код:

public class MyDate : IComparable<MyDate>
{
    int IComparable<MyDate>.CompareTo(MyDate obj)
    {
        if (obj != null)
        {
            if (this.Value.Ticks < obj.Value.Ticks)
            {
                return 1;
            }
            else if (this.Value.Ticks == obj.Value.Ticks)
            {
                return 0;
            }
            else
            {
                return -1;
            }
        }
    }

    public MyDate(DateTime date)
    {
        this.Value = date;
    }

    public DateTime Value;
}


class Program
{
    static void Main(string[] args)
    {
        SortedDictionary<MyDate, int> sd = new SortedDictionary<MyDate,int>();

        sd.Add(new MyDate(new DateTime(1)), 1);
        sd.Add(new MyDate(new DateTime(2)), 2);

       Console.WriteLine(sd.Max().Value);   // Throws exception!!  
    }
}

Что, черт возьми, я делаю неправильно ???

1 Ответ

1 голос
/ 11 мая 2010

Это потому, что это не попытка сравнить ваши пользовательские объекты, а экземпляры KeyValuePair.

Это должно работать

Console.WriteLine(sd.Last().Value);   

Поскольку отсортированный словарь отсортирован, последний элемент является наибольшим при условии, что компаратор сравнивает наименьшее с наибольшим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...