如何复制常用属性列表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 ",需要在几个列表(其属性不同)上多次使用这个过程,所以最好是我写任何可以为我做的通用的东西。
如果有任何疑问请询问,提前感谢。任何形式的建议都是可以接受的
可以使用反射
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
,或一个基类