列表迭代器只返回最后一行c#

时间:2015-02-01 06:30:06

标签: c#

数据库中有两个表.ModelTable和模型的值。 以下代码

 MyDB_Tables contain : ID|GroupNumber|ModelName|Picture
    ****
    MyDB_Tables Model_T = new MyDB_Tables(); 
    ArrayList ArrList = new ArrayList();
    List<long> T = new List<long>();
    for (int i=0 ; i<5; i++)
    {
      T.add(i);
    }
     foreach (var item6 in T)
    {

    var MyList =ECommerce_Rep.Return_ModelByID(Convert.ToInt64(item6));
      //Return_ModelByID is a function for return MyDB_Tables info by ID// 
    for (int k = 0; k < MyList.Count; k++)

    {

         Model_T.ID = MyList[k].ID;
         Model_T.GroupNumber = MyList[k].GroupNumber;
         Model_T.ModelName = MyList[k].ModelName;
         Model_T.Picture = MyList[k].Picture;

         ArrList.Add(Model_T);
    }
    }

假设有三个数字1,2,3与ID相关。顶部代码,查看返回ID = 3 3次。就像这个

ID =3 GroupNumber =1001 ModelName = CPU Core I3 Picture = 1.jpg


ID =3 GroupNumber =1001 ModelName = CPU Core I3 Picture = 1.jpg


ID =3 GroupNumber =1001 ModelName = CPU Core I3 Picture = 1.jpg


什么是解决方案?谢谢

1 个答案:

答案 0 :(得分:0)

尝试将MyDb_Tables设置为for循环内的新实例,而不是您在循环外部进行的单个初始化。

原因是否则您要添加到ArrList的项目都是对同一实例的引用,并且它们都会在每次迭代中得到更新,因此它们都会以相同的值结束(匹配MyList中的最后一项。

如果你将它设置为循环内的新实例,那么ArrList中的引用都将是唯一的:

for (int k = 0; k < MyList.Count; k++)
{
     MyDB_Tables Model_T = new MyDB_Tables();

     Model_T.ID = MyList[k].ID;
     Model_T.GroupNumber = MyList[k].GroupNumber;
     Model_T.ModelName = MyList[k].ModelName;
     Model_T.Picture = MyList[k].Picture;

     ArrList.Add(Model_T);
}

当你在它的时候,你也可以使用foreach并摆脱索引语法,你可以使用对象初始化器语法直接添加一个新对象:

foreach(var item in MyList)
{
     ArrList.Add(new MyDB_Tables
     {
         ID = item.ID,
         GroupNumber = item.GroupNumber,
         ModelName = item.ModelName,
         Picture = item.Picture
     });
}