代码之家  ›  专栏  ›  技术社区  ›  Matt Anxo P

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

  •  13
  • Matt Anxo P  · 技术社区  · 14 年前

    所以我有一个有很多属性的对象列表。这些属性中包括 名称 身份证件 . 让我们称这个对象为extendedobject。我还宣布了 不同的 具有 只有 性质 名称 身份证件 . 让我们称这个对象为basicObject。

    我要做的是将扩展对象列表转换或复制(因为没有更好的单词)到basicObject对象列表。我知道C列表有很多有用的有趣方法,所以我想知道是否有一种简单的方法可以表达出以下效果:

    basicObjectList = extendedObjectList.SomeListMethod<BasicObject>(some condition here);
    

    但我意识到它最终可能看起来不像那样。我还认识到,我可以遍历扩展对象列表,从每个扩展对象的名称和ID创建一个新的basicObject,并将其推送到一个basicObjects列表中。但我希望有比这更优雅的东西。

    有人有什么想法吗?非常感谢。

    4 回复  |  直到 14 年前
        1
  •  25
  •   LukeH    14 年前

    BasicObject ExtendedObject ConvertAll

    List<BasicObject> basicObjectList =
        extendedObjectList.ConvertAll(x => new BasicObject
                                               {
                                                   id = x.id,
                                                   name = x.name
                                               });
    

    Select convert back to a list

    List<BasicObject> basicObjectList =
        extendedObjectList.Select(x => new BasicObject
                                           {
                                               id = x.id,
                                               name = x.name
                                           }).ToList();
    
        2
  •  8
  •   kjn    14 年前

    basicObjectList = extendedObjectList.Select(x => new BasicObject { Id=x.Id, Name=x.Name})
    
        3
  •  4
  •   Cheng Chen    14 年前
    var basicObjectList = extendedObjectList.Select(eo => new BasicObject { name = eo.name, id = eo.id });
    
        4
  •  0
  •   Michael    14 年前

    // "var" used so that runtime infers the type automatically
    var subset = extendedObjectList
       // you can use any Linq based clause for filtering
       .Where(a => <conditions>)
       // where the runtime creates a runtime anonymous type to describe your "BasicObject"
       .Select(a => new { a.Property1, a.Property2, a.Property3 })
       // conversion to a List collection of your anonymous type
       .ToList();
    

    // execute an anonymous delegate (method) for each of the new anonymous objects
    subset.ForEach
    (
       basicObject =>
       {
          Console.WriteLine("Property1 - {0}", basicObject.Property1);
          Console.WriteLine("Property2 - {0}", basicObject.Property2);
          Console.WriteLine("Property3 - {0}", basicObject.Property3);
       }
    );
    
    // grab the first object off the list
    var firstBasicObject = subset.First();
    
    // sort the anonymously typed list
    var sortedSubset = subset.OrderBy(a => a.Property1).ToList();