ASP.NET - Foreach最后一个元素出现在整个列表中

时间:2016-08-24 13:15:57

标签: c# asp.net-mvc list foreach dropdownbox

这让我疯狂。在使用cont记录填充列表后,它会发生变化 所以每个价值都是一样的。该值是最后一条记录中的值。

public ActionResult Index()
{
    var cont = db.AspNetUsers.ToList();
    var list = new List<SelectListItem> ();
    SelectListItem ctr = new SelectListItem();

    foreach (var item in cont)
    {
        ctr.Text = item.Email;
        ctr.Value = item.Email;
        list.Add(ctr);

        //last iteration everything is fine, every element of list holds
        //another value
    }       

   // debugger shows that all list elements have the same text and value
   TempData["list"] = list;

   return View();
}

谢谢!

2 个答案:

答案 0 :(得分:3)

这是因为您每次迭代都要添加和编辑相同的对象ctr。这是一个引用类型,因此每次执行ctr.*something*而不初始化ctr的新对象时,您也会编辑相同的文件。

foreach (var item in cont)
{
    SelectListItem ctr = new SelectListItem();
    ctr.Text = item.Email;
    ctr.Value = item.Email;
    list.Add(ctr);
}

SelectListItem ctr = new SelectListItem();移至列表

答案 1 :(得分:1)

您需要在foreach循环中实例化 SelectListItem ctr = new SelectListItem(),否则您将多次在列表中添加相同的对象,并且当您更改对象的值时您将更改整个列表的值。