我有一個非常惱人的錯誤,我的comparer.Compare(x,y)沒有被調用。我有一個IList從數據庫中返回一堆實體,然後對從數據庫返回的每個實體內部的實體列表進行排序。當排序IList時比較器沒有被調用
ie:在這個例子中,每個家庭都有很多賬戶,我想根據賬戶實體的屬性對子列表進行排序。
我打電話邏輯如下:
List<Household> households = query.ToList();
households.Sort(new HouseholdComparer());
return households;
,我的比較器看起來像這樣:
public class HouseholdComparer : IComparer<Household>
{
public int Compare(Household x, Household y)
{
foreach (Account xAccount in x.Accounts)
{
foreach (Account yAccount in y.Accounts)
{
if (xAccount.StartDate == yAccount.StartDate)
{
if ((xAccount.RevenueT12.HasValue && yAccount.RevenueT12.HasValue)
&& (xAccount.RevenueT12.Value == yAccount.RevenueT12.Value))
{
if ((xAccount.AUAAnnual.HasValue && yAccount.AUAAnnual.HasValue)
&& (xAccount.AUAAnnual.Value == yAccount.AUAAnnual.Value))
return 0; // all same whatever result
if (!xAccount.AUAAnnual.HasValue || !yAccount.AUAAnnual.HasValue) return 0;
if (xAccount.AUAAnnual.Value > yAccount.AUAAnnual.Value) return 1;
if (xAccount.AUAAnnual.Value < yAccount.AUAAnnual.Value) return -1;
}
else
{
if (!xAccount.RevenueT12.HasValue || !yAccount.RevenueT12.HasValue) return 0;
if (xAccount.RevenueT12.Value > yAccount.RevenueT12.Value) return 1;
if (xAccount.RevenueT12.Value < yAccount.RevenueT12.Value) return -1;
}
}
else
{
if (x.StartDate > y.StartDate) return 1;
if (x.StartDate < y.StartDate) return -1;
}
}
}
return 0; // it shouldn't get here
}
當我運行調試我得到的構造,但沒有命中的比較方法,任何人都可以幫忙嗎?
我沒有看到Compare()的任何調用。你是否超載比較操作符? – Paddyd
您是否檢查列表是否爲空或僅包含一個元素?這種情況下不會調用'Compare'方法。 – Douglas
用一個簡短但完整的例子來證明這個問題會更容易診斷。如果列表爲空或者只有一個元素,則不需要調用比較器。 –