Non posso creare un confronto
Domanda
Ho una lezione
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; }
}
Ho un elenco di oggetti di questa classe:
List<PAUserAllowedTimesModel> model = ...
Voglio ordinare questa raccolta per selezione. Cerco:
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;
}
}
poi
model.Sort(new PAUserAllowedTimesModelComparer());
Ma mescola solo elementi, non ordinare. Che c'è?
Soluzione
Il tuo confronto lo farà mai restituire -1, quindi viola il Compare
contrarre...
Fortunatamente puoi renderlo molto più semplice comunque:
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);
}
O usando Linq:
model = model.OrderBy(x => x.SelectedDate).ToList();
Si noti che questo non fa un a posto Ordina, a differenza di List<T>.Sort
.
Altri suggerimenti
La tua implementazione di IComparer
è sbagliato. Devi restituire 0 se gli elementi sono pari, 1 se x > y
e -1 se y > x
o viceversa, a seconda che tu voglia ordinare la discesa o l'ascesa.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow