Я использую C#, .net4.0 и WinformC# list.sort и CompareTo бросить IndexOutOfRangeException
я реализовал метод сортировки списка пользовательских объектов. Основной класс имеет список объектов (lpHTC), которые будут сортироваться
public class PeriodeHTList
{
private List<PeriodeHTConflit> _lpHTC;
public PeriodeHTList()
{
_lpHTC = new List<PeriodeHTConflit>();
}
public void AddPeriodeHTConflit(PeriodeHT pHT)
{
PeriodeHTConflit pHTC = new PeriodeHTConflit();
pHTC.pHT = pHT;
_lpHTC.Add(pHTC);
}
public void Sort()
{
_lpHTC.Sort();
}
}
Второй класс является более сложным, на самом деле. Переменная РНТ будет использовать в своего рода
public class PeriodeHTConflit : IComparable<PeriodeHTConflit>
{
public PeriodeHT pHT;
public PeriodeHTConflit()
{
}
public int CompareTo(PeriodeHTConflit pHTC)
{
if(pHTC==null)
return 1;
if(pHT.date<=pHTC.pHT.date)
{
return -1;
}
else
{
return 1;
}
}
}
Последний класс
public class PeriodeHT
{
public DateTime date;
public PeriodeHT()
{
}
}
создать PeriodeHTList, а затем наполнить ее AddPeriodeHTConflit(). Затем я вызываю periodeHTListVar.Sort().
try
{
periodeHTListVar.Sort();
}
catch (Exception ex)
{
//some error code
}
И я получаю первое событие Chance IndexOutOfRangeException. Уловка не выполняется, и программа продолжается. Но сортировка не завершена.
Я установил точку отладки в методе CompareTo(), и я получаю странное поведение. После нескольких правильных вызовов CompareTo все остальные вызовы используют два одинаковых объекта (объект PeriodeHTConflit и параметр pHTC) и всегда последний из несортированного списка.
Я использую Icomparable и CompareTo() для многих вещей без каких-либо проблем, кроме как здесь (и другого подобного объекта).
Может кто-нибудь мне помочь?
возвратного pHT.date.СотрагеТо (pHTC.pHT.date); –