1

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

类 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”,需要在几个列表(属性不同)上多次使用这个过程所以我最好写任何常见的东西可以为我做那件事。

如果有任何疑问,请询问,谢谢。任何类型的建议都可以接受

4

5 回答 5

1

考虑使用AutoMapper,它就是为了做到这一点而设计的。

于 2013-04-15T09:39:59.613 回答
1

如果要映射具有相同名称的属性,则可以使用Automapper(可从 NuGet 获得)之类的东西,它会自动为您完成。在应用程序启动的某处添加映射:

Mapper.CreateMap<Source, Destination>();

默认映射将为具有相同名称的属性提供映射。所以,然后简单地映射列表:

List<Source> list1 = new List<Source>();
List<Destination> list2 = Mapper.Map<List<Destination>>(list1);
于 2013-04-15T09:40:21.897 回答
1

你可以使用反射

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(){/*....*/});
于 2013-04-15T09:44:01.463 回答
0

只需使用.select

List<y> = oldList.select(x=> new y{prop1 = x.prop1}).ToList();
于 2013-04-15T09:40:26.583 回答
0

如果您有共同的属性,也许它们应该在一个interface, 或一个基类中。

于 2013-04-15T09:40:59.523 回答