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(),否则您将多次在列表中添加相同的对象,并且当您更改您将更改整个列表的值的对象的值。
这让我抓狂。用 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(),否则您将多次在列表中添加相同的对象,并且当您更改您将更改整个列表的值的对象的值。