C# 如何组合两个不同类型的列表?

C# 如何组合两个不同类型的列表?,c#,.net,.net-core,C#,.net,.net Core,我有两个列表,一个是ID列表 列表ID=新列表{1,2,3,4,5} 另一个包含数据的列表 Person类有两个属性Id和Name List<Person> persons= new List<Person> { new Person { Name = "test1"}, new Person { Name = "test2"}, new Person { Name = "test3"}, new Person { Name = "test4"}, new Pers

我有两个列表,一个是ID列表 列表ID=新列表{1,2,3,4,5}

另一个包含数据的列表 Person类有两个属性Id和Name

List<Person> persons= new List<Person> { new Person { Name = "test1"},  new Person { Name = "test2"},  new Person { Name = "test3"}, new Person { Name = "test4"},  new Person { Name = "test5"}};
现在我想从id列表中填充每个人的id


在linq中有没有办法做到这一点?

有很多方法可以做到这一点。。假设您的列表长度相同

for循环

ForEach延拓法

排队

拉链有副作用

Enumerable.Range(0, persons.Count).Select(i => persons[i].Id = ids[i]).ToList();
// or
var persons = Enumerable.Range(0, persons.Count).Select(i => { persons[i].Id = ids[i]; return persons[i]; }).ToList();
ids.Zip(persons, (i, person) => person.Id = i).ToList();
// or
var persons = ids.Zip(persons, (i, person) => { person.Id = i; return person; }).ToList();
// or still very iffy
ids.Zip(persons, (i, person) => (i: i, person: person))
   .ToList()
   .ForEach(x => x.person.Id = x.i);
persons.Select((person, i) => person.Id = i).ToList();
// or
var persons = persons.Select((person, i) => { person.Id = i; return person; }).ToList();
选择有副作用的

Enumerable.Range(0, persons.Count).Select(i => persons[i].Id = ids[i]).ToList();
// or
var persons = Enumerable.Range(0, persons.Count).Select(i => { persons[i].Id = ids[i]; return persons[i]; }).ToList();
ids.Zip(persons, (i, person) => person.Id = i).ToList();
// or
var persons = ids.Zip(persons, (i, person) => { person.Id = i; return person; }).ToList();
// or still very iffy
ids.Zip(persons, (i, person) => (i: i, person: person))
   .ToList()
   .ForEach(x => x.person.Id = x.i);
persons.Select((person, i) => person.Id = i).ToList();
// or
var persons = persons.Select((person, i) => { person.Id = i; return person; }).ToList();
在这里添加更多内容

选择重载,索引作为第二个参数,并且没有副作用

var personsWithId = persons
    .Select((person, id) => new Person
    {
        Id = id,
        Name = person.Name
    })
    .ToList();
var personIds = new[] { 1, 3, 5, 7, 9 };
var personsWithId = persons
    .Zip(personIds, (person, id) => new Person
    {
        Id = id,
        Name = person.Name
    })
    .ToList();
如果您有预定义的id列表,并且希望将id应用于具有“人员列表”中相同索引的人员

无副作用

var personsWithId = persons
    .Select((person, id) => new Person
    {
        Id = id,
        Name = person.Name
    })
    .ToList();
var personIds = new[] { 1, 3, 5, 7, 9 };
var personsWithId = persons
    .Zip(personIds, (person, id) => new Person
    {
        Id = id,
        Name = person.Name
    })
    .ToList();

向个人填充ID的基础是什么?这些单独的id和人名之间的关系是什么?索引中,两个列表的长度相同,最后索引中的第一个列表将具有人名id。我想要填充id的person对象作为结果,zip和select方法会给我一个int列表作为结果