Не могу создать Comparer - PullRequest
       11

Не могу создать Comparer

0 голосов
/ 21 февраля 2012

У меня есть класс

public class PAUserAllowedTimesModel
{
    public List<AllowedTime> Times { get; set; }
    public List<AllowedTime> BusyTimes { get; set; }
    public DateTime SelectedDate { get; set; }
    public int DateID { get; set; }
}

У меня есть список объектов этого класса:

List<PAUserAllowedTimesModel> model = ...

Я хочу отсортировать эту коллекцию по SelectedDate. Я стараюсь:

public class PAUserAllowedTimesModelComparer : IComparer<ITW2012Mobile.ViewModels.PAUserAllowedTimesModel>
{
    public int Compare(ViewModels.PAUserAllowedTimesModel x, ViewModels.PAUserAllowedTimesModel y)
    {
        if (x.SelectedDate > y.SelectedDate)
            return 0;
        else
            return 1;
    }
}

, а затем

model.Sort(new PAUserAllowedTimesModelComparer());

но он просто смешивает элементы, а не сортирует. Что не так?

Ответы [ 2 ]

5 голосов
/ 21 февраля 2012

Ваш компаратор никогда не вернет -1, поэтому он нарушает Compare контракт ...

К счастью, вы все равно можете сделать это намного проще:

public int Compare(ViewModels.PAUserAllowedTimesModel x, 
                   ViewModels.PAUserAllowedTimesModel y)
{
    // Possibly reverse this, depending on what you're trying to do
    return x.SelectedDate.CompareTo(y.SelectedDate);
}

Или используя LINQ:

model = model.OrderBy(x => x.SelectedDate).ToList();

Обратите внимание, что в отличие от List<T>.Sort.

это не делает на месте сортировку.
3 голосов
/ 21 февраля 2012

Ваша реализация IComparer неверна.Вам необходимо вернуть 0, если элементы равны , 1, если x > y, и -1, если y > x или наоборот, в зависимости от того, хотите ли вы отсортировать по убыванию или по возрастанию.

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