我使用C#,.net4.0和WinForm的C#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();
}
}
第二類是在現實中更復雜。該PHT變量會使用在排序
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
}
我得到了第一次機會IndexOutOfRangeException。該捕捉未被執行,並且程序繼續。但排序並未完成。我在CompareTo()方法中添加了一個調試點,並且我得到了一個奇怪的行爲:經過對CompareTo的一些正確調用,所有其他調用使用兩個相同的對象(PeriodeHTConflit對象和pHTC參數),以及總是最後的未排序列表。
我使用Icomparable和CompareTo()很多東西沒有任何問題,除了這裏(和另一個類似的objet)。
有人可以幫助我嗎?
回報pHT.date。的CompareTo(pHTC.pHT.date); –