C#列表:如何将元素从一个列表复制到另一个列表,但只复制某些属性

Meg*_*att 13 c# list

所以我有一个包含许多属性的对象列表.这些属性包括nameid.我们将此对象称为ExtendedObject.我还声明了一个新的List,它包含只有属性id不同对象.我们将此对象称为BasicObject.

我想要做的是将ExtendedObject对象列表转换或复制(缺少更好的单词)到BasicObject对象列表.我知道C#列表有很多有用的方法,所以我想知道是否有一种简单的方法可以说出以下结果:

basicObjectList = extendedObjectList.SomeListMethod<BasicObject>(some condition here);
Run Code Online (Sandbox Code Playgroud)

但我意识到它可能最终看起来不像那样.我也意识到我可以循环遍历ExtendedObjects列表,从每个ExtendedObject的名称和id创建一个新的BasicObject,并将其推送到BasicObjects列表中.但我希望有一些比这更优雅的东西.

有没有人有任何想法?非常感谢.

Luk*_*keH 27

这取决于你是如何构建你BasicObjectExtendedObject,但你可以使用这个ConvertAll方法:

List<BasicObject> basicObjectList =
    extendedObjectList.ConvertAll(x => new BasicObject
                                           {
                                               id = x.id,
                                               name = x.name
                                           });
Run Code Online (Sandbox Code Playgroud)

或者,如果您愿意,可以使用LINQ Select方法然后转换回列表:

List<BasicObject> basicObjectList =
    extendedObjectList.Select(x => new BasicObject
                                       {
                                           id = x.id,
                                           name = x.name
                                       }).ToList();
Run Code Online (Sandbox Code Playgroud)


kjn*_*kjn 8

如果您使用的是.NET 3.5或更高版本,可以使用LINQ投影来完成:

basicObjectList = extendedObjectList.Select(x => new BasicObject { Id=x.Id, Name=x.Name})
Run Code Online (Sandbox Code Playgroud)