在C#中明智地合并两个列表元素

问题描述

我有两个类别相同且长度相同的列表。我希望基于自定义功能将它们逐个元素合并。

我想合并那些在列表中相同位置出现的元素对。

我有以下两个列表:

            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"
                    }
                };

我希望将它们合并以获得以下列表:

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

解决方法

就像其他人在评论中建议的一样,我认为您正在寻找的LINQ方法是Zip

var users3 = users1.Zip(users2,(first,second) => new classA{id = first.id,email = first.email,name = second.name});

上面的代码将创建一个新列表,该列表从第一个列表中获取idemail,从第二个列表中获取name。列表的顺序对于事物的合并方式很重要,我只是选择以这种方式处理合并,以获得所需的示例输出。我将留给您了解实际的合并规则。