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

C# ASP.NET-Foreach最后一个元素出现在整个列表中,c#,asp.net-mvc,list,foreach,dropdownbox,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)

这简直让我发疯。用
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();
}
public ActionResult Index()
{
var cont=db.AspNetUsers.ToList();
var list=新列表();
SelectListItem ctr=新建SelectListItem();
foreach(续中的var项目)
{
ctr.Text=item.Email;
ctr.Value=item.Email;
列表。添加(ctr);
//最后一次迭代一切正常,列表中的每个元素都有效
//另一个价值
}       
//调试器显示所有列表元素具有相同的文本和值
TempData[“列表”]=列表;
返回视图();
}

谢谢

这是因为每次迭代都要添加和编辑相同的对象
ctr
。它是一种引用类型,因此每次执行
ctr.*某个*
操作时,如果没有为
ctr
初始化要引用的新对象,您将编辑相同的对象

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

Move
SelectListItem ctr=new SelectListItem()编码到列表中

,这是因为每次迭代都要添加和编辑相同的对象
ctr
。它是一种引用类型,因此每次执行
ctr.*某个*
操作时,如果没有为
ctr
初始化要引用的新对象,您将编辑相同的对象

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

Move
SelectListItem ctr=new SelectListItem()编码到列表中

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

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

您需要为要添加的每个项目创建一个新的
SelectListItem
。实际上,每次添加都使用相同的
SelectListItem
,并且每次循环迭代都要更改属性。您需要为每个要添加的项目创建一个新的
SelectListItem
。实际上,每次添加都使用相同的
SelectListItem
,每次循环迭代都会更改属性。非常感谢!信息技术worked@AleksanderDudek-不客气:)非常感谢!信息技术worked@AleksanderDudek-不客气:)