【问题标题】:Copying a C# Collection to another collection [closed]将 C# 集合复制到另一个集合 [关闭]
【发布时间】:2016-02-28 10:08:38
【问题描述】:

我有以下列表/集合,我需要将其复制到另一个列表中。但该列表没有相同数量的参数。但是对象的名称和类型是相同的。这里是课堂

头等舱:

public class Class1
{
  int locationID{get;set;}
  string locationName{get;set;}
}

二等:

public class Class2
{
  int locationID{get;set;}
  string locationName{get;set;}
  string identifier{get;set;}
}

在我的方法中,我需要获取 List1 的值并将其复制到 List2(Class2)。 List2 有一个额外的参数 identifier。 这如何在 C# 中实现??

【问题讨论】:

  • 您想将List<Class1> 复制到List<Class2>?它们有关系吗? Class1Class2 的父级吗?请给我们更多背景信息。
  • 那么,对于 list2 中的每个项目,您希望标识符的值是多少? (顺便说一句,我强烈建议您开始遵循 .NET 命名约定,并在标点符号周围添加空格...)
  • 我没有看到任何收藏?标识符中应该放什么?请注意,共享相同属性的对象可能可以通过使用继承来解决。
  • 有些矛盾。什么是“列表参数”?如果你有两个类,类型怎么可能相同?展示你如何填写列表和你想要的结果。
  • 在我看来Class2应该是Class1的子类。噗。你所有的问题都消失了。

标签: c#


【解决方案1】:

如果Class1Class2类型在形式上不相关,则必须手动实现转换,可以使用Linq完成,如下所示。

var NewList
  = OldList.Select(
      x => new Class2{ locationID = x.locationID, locationName = x.locationName }
                  ).ToList();

【讨论】:

    【解决方案2】:
    var l1 = new List<Class1>();
    var l2 = new List<Class2>();
    
    l2.AddRange(l1.Select(i=>new Class2() {locationID = i.locationID,
                                           locationName = i.locationName});
    

    【讨论】:

    • 这很好用。谢谢@Bradley
    【解决方案3】:

    Class1 和 Class2 两个是两个不同的对象和签名,不能只是从一个复制到另一个。您需要做的是遍历一个列表,创建一个新对象,复制属性值,然后将其添加到另一个列表中。

    var firstList = GetFirstList() //returns List<Class1>();
    var secondList = new List<Class2>();
    
    foreach(var first in firstList)
    {
        var second = new Class2();
        second.locationID = first.locationID;
        second.locationName = first.locationName;
    
        //you could even set the identifier property here
        second.identifier = someValue;
    
        secondList.Add(second);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-13
      • 2013-11-07
      • 2016-08-24
      • 2020-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多