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

在C#中按元素位置自定义合并同类型等长列表

按对应位置合并两个等长同类型List集合

嘿,针对你这个需求,我们可以用LINQ的Zip方法快速实现按对应位置两两合并的操作,再结合自定义的合并逻辑就能得到你想要的结果。下面是具体的实现步骤和代码:

完整代码示例

public class classA { 
    public classA() { } 
    public int id { get; set; } 
    public string email { get; set; } 
    public string name { get; set; } 
} 

// 初始化你的两个集合
var users1 = new List<classA> { 
    new classA{ id= 1, email = "Test1@Test.com" }, 
    new classA{ id= 2, email = "Test2@Test.com" } 
}; 

var users2 = new List<classA> { 
    new classA{ id= 456, email = "Test1@Test.com", name = "Test One" }, 
    new classA{ id= 123, email = "Test2@Test.com", name = "Test Two" } 
};

// 核心合并逻辑:按对应位置配对并自定义合并规则
var mergedUsers = users1.Zip(users2, (u1, u2) => new classA
{
    id = u1.id,    // 保留users1的id
    email = u1.email, // 保留users1的email(这里两个集合的email一致,取哪个都可以)
    name = u2.name // 提取users2的name
}).ToList();

代码解释

  • Zip方法的作用:这是LINQ专门为等长序列设计的配对工具,它会依次取两个集合中索引相同的元素,把每一对元素传入你定义的合并逻辑里,最终生成一个新的序列。
  • 自定义合并规则:这里根据你的期望结果,我们明确了合并规则——从users1拿id和email,从users2拿name。如果之后你的合并规则有变化,直接修改这部分逻辑就行。
  • 适配性:因为你已经明确两个集合是同类型、等长的,所以Zip会完美匹配每一对元素,不会出现遗漏或多余的情况。

更灵活的自定义合并函数

如果你的合并逻辑比较复杂,或者之后需要复用这个逻辑,可以把合并规则抽成一个单独的方法:

// 抽离的自定义合并函数
private static classA MergeClassA(classA userFromList1, classA userFromList2)
{
    return new classA
    {
        id = userFromList1.id,
        email = userFromList1.email,
        name = userFromList2.name
        // 后续可以在这里扩展更多合并规则,比如处理空值、合并其他字段等
    };
}

// 使用自定义函数完成合并
var mergedUsers = users1.Zip(users2, MergeClassA).ToList();

运行上面的代码后,mergedUsers就会完全符合你期望的结果:

{ { id=1, email="Test1@Test.com", name="Test One" }, { id=2, email="Test2@Test.com", name="Test Two" } }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 15:42:54