gpt4 book ai didi

c# - 排序 IList 时未调用比较器

转载 作者:太空宇宙 更新时间:2023-11-03 17:02:40 24 4
gpt4 key购买 nike

我有一个非常烦人的错误,我的 comparer.Compare(x, y) 没有被调用。我有一个 IList,它从数据库返回一堆实体,然后我对从数据库返回的每个实体内的实体列表进行排序。

即:在这个例子中,每个家庭都有很多账户,我想按账户实体的属性对子列表进行排序。

我的调用逻辑如下:

      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
}

当我运行调试器时,我在构造函数中遇到了一个问题,但在比较方法中却什么也没有,有人能帮忙吗?????

最佳答案

我知道三个可能的原因:

  1. 列表只有一个元素
  2. 列表为空
  3. 列表中的所有项目返回不同的哈希码 (GetHashCode)(例如 Distinct 就是这样工作的)

关于c# - 排序 IList 时未调用比较器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18962364/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com