You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用LINQ检查两个List<B>中内嵌List<A>的所有字段是否匹配?

问题分析与修正方案

原模型代码

class A
{
    public string Value { get; set; }
    public int? bId { get; set; }
    public B b { get; set; }
}
class B
{
    public int Id { get; set; }
    public List<A> aList { get; set; }
    public B ()
    {
        aList = new List<A>();
    }
}

原方法存在的问题

  • 循环内每次都会覆盖q集合,最终仅保留最后一次循环的结果,无法正确记录所有匹配情况
  • 仅对比了A类的Value字段,未覆盖bId等其他需要检查的字段
  • 逻辑与需求不符:原代码仅找出两个aList中Value相同的元素,未实现“对比每个B对象内嵌List所有字段”的目标

修正后的实现

第一步:为A类实现值相等判断

因为引用类型默认按引用判断相等,我们需要自定义值相等逻辑,覆盖所有需要对比的字段:

class A : IEquatable<A>
{
    public string Value { get; set; }
    public int? bId { get; set; }
    public B b { get; set; }

    // 自定义值相等判断逻辑
    public bool Equals(A other)
    {
        if (other == null) return false;
        // 仅对比值类型/字符串字段,避免B对象的循环引用问题
        return string.Equals(Value, other.Value) && bId == other.bId;
    }

    public override bool Equals(object obj)
    {
        return Equals(obj as A);
    }

    // 配套重写GetHashCode,保证相等判断的一致性
    public override int GetHashCode()
    {
        return HashCode.Combine(Value, bId);
    }
}

class B
{
    public int Id { get; set; }
    public List<A> aList { get; set; }
    public B()
    {
        aList = new List<A>();
    }
}

第二步:修正对比方法

根据需求(两个List对应位置的B对象,其内嵌List的所有字段完全匹配),实现如下:

bool checkingDuplicatedObjects(List<B> b1, List<B> b2)
{
    // 先判断集合总数是否一致
    if (b1.Count != b2.Count)
        return false;

    // 遍历每个对应位置的B对象
    for (int i = 0; i < b1.Count; i++)
    {
        var bItem1 = b1[i];
        var bItem2 = b2[i];

        // 先判断aList元素数量是否一致
        if (bItem1.aList.Count != bItem2.aList.Count)
            return false;

        // 判断两个aList是否完全匹配(顺序一致用SequenceEqual;不关心顺序则用HashSet的SetEquals)
        if (!bItem1.aList.SequenceEqual(bItem2.aList))
            return false;
    }

    // 所有对应位置的B对象的aList均匹配
    return true;
}

内容的提问来源于stack exchange,提问作者Bahman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 09:07:46