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

ASP.NET - Foreach last element appears on whole list

这让我抓狂。用 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();
}

谢谢!

那是因为您在每次迭代中添加和编辑同一个对象 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();移入列表

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