【问题标题】:How to add multiple objects list inside a list如何在列表中添加多个对象列表
【发布时间】:2020-01-18 09:08:35
【问题描述】:

当我在循环后在bCPList 中添加一个对象时,所有记录都与最后插入的对象相同。为什么会发生这种情况,我该如何解决?

public List<Entity.BCPToolkitWorkplace> Load_work_Place(List<BCPToolkitWorkplace> bCPToolkit)
{
    Entity.BCPToolkitWorkplace bCP = new Entity.BCPToolkitWorkplace();
    List< Entity.BCPToolkitWorkplace> bCPList = new List<Entity.BCPToolkitWorkplace>();

    foreach (var item in bCPToolkit)
    {
        bCP.txn_type = item.txn_type;
        bCP.workplace_id = item.workplace_id;
        bCP.workplace_name = item.workplace_name;
        bCP.workplace_number = item.workplace_number;
        bCPList.Add(bCP);
    }

    return bCPList;
}

【问题讨论】:

  • 请具体说明:哪种语言:Java? C#?这当然不是关于两者
  • 在foreach循环内添加对象的创建。现在您正在更改同一个对象并一遍又一遍地将其添加到列表中。但由于它是一个参考,因此场景后面只有 1 个对象需要您不断更改。
  • 引用类型绝对合乎逻辑。

标签: c# list object reference-type


【解决方案1】:

在循环内声明BCP对象如下

public List< Entity.BCPToolkitWorkplace> Load_work_Place(List< BCPToolkitWorkplace> bCPToolkit)
        {

            List< Entity.BCPToolkitWorkplace> bCPList = new List< Entity.BCPToolkitWorkplace>();

            foreach (var item in bCPToolkit)
            {
                // Declaring the bcp object inside the loop
                Entity.BCPToolkitWorkplace bCP = new Entity.BCPToolkitWorkplace();
                bCP.txn_type = item.txn_type;
                bCP.workplace_id = item.workplace_id;
                bCP.workplace_name = item.workplace_name;
                bCP.workplace_number = item.workplace_number;
                bCPList.Add(bCP);
            }

            return bCPList;
        }

【讨论】:

    【解决方案2】:

    您需要将此行移动到foreach 的内部。

    Entity.BCPToolkitWorkplace bCP = new Entity.BCPToolkitWorkplace();
    

    发生这种情况的原因是Entity.BCPToolkitWorkplace,显然被定义为一个类(引用类型),并且您在顶部只定义了该类的一个实例,因此您在技术上将相同的实例添加到一遍又一遍地列出来。

    查看here 的答案,了解有关引用类型如何工作的更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-16
      • 2021-01-28
      相关资源
      最近更新 更多