如何复制常用属性列表List< y>

本文关键字:列表 属性 List 常用 何复制 复制 | 更新日期: 2023-09-27 18:09:16

如何将一个列表复制到另一个列表

类x和类y都有几个共同的属性想把共同的属性复制到另一个列表,假设x到y

有两个列表一个复制一个列表的内容到另一个,我使用下面的语法复制列表到列表项。

List<SomeType2> list1 = new List<SomeType2>();
List<SomeType> list2 = new List<SomeType>();
// This will copy all the items from list 1 to list 2
list1.ForEach(i => list2.Add(i));

但是我的list1和list2不一样,当它们有相同类型的语法时,它们工作得很好。

我的列表是不一样的,所以我需要使用下面的语法复制

List<Y> y = new List<Y>(x.ConvertAll<Y>(e => { return new Y { Id = e.Id, Name = e.Name }; }));

但是我不想使用静态的" Id = e.Id, Name = e.Name ",需要在几个列表(其属性不同)上多次使用这个过程,所以最好是我写任何可以为我做的通用的东西。

如果有任何疑问请询问,提前感谢。任何形式的建议都是可以接受的

如何复制常用属性列表<x>List< y>

可以使用反射

static T2 Copy<T1, T2>(T1 from)
{
    T2 to = Activator.CreateInstance<T2>();
    Type toType = typeof(T2);
    foreach (var p in from.GetType().GetProperties())
    {
        var prop = toType.GetProperty(p.Name);
        if (prop != null)
            prop.SetValue(to, p.GetValue(from,null),null);
    }
    return to;
}

SomeType2 t2 = Copy<SomeType1,SomeType2>(new SomeType1(){/*....*/});

考虑使用AutoMapper,它的设想就是这样的

如果您想映射具有相同名称的属性,那么您可以使用Automapper(可从NuGet获得)之类的东西,它将自动为您完成此操作。在应用程序开始处添加映射:

Mapper.CreateMap<Source, Destination>();

默认映射将为同名的属性提供映射。那么,只需映射列表:

List<Source> list1 = new List<Source>();
List<Destination> list2 = Mapper.Map<List<Destination>>(list1);

就用.select

List<y> = oldList.select(x=> new y{prop1 = x.prop1}).ToList();

如果你有共同的属性,也许他们应该在一个interface,或一个基类