在循环中使用NEW时,将项添加到对象的LIST 会导致重复的对象

List bolList = new List(); protected void Button1_Click(object sender, EventArgs e) { BillOfLading newBol = new BillOfLading("AXSY1414114"); bolList.Add(newBol); newBol.BillOfLadingNumber = "CRXY99991231"; bolList.Add(newBol); } 

我期望bolList会容纳两个不同的对象或值,但看起来这个简单的代码不起作用。 有任何想法吗?

结果Immediates:

 bolList

计数= 2
     [0]:{kTracker.BillOfLading}
     [1]:{kTracker.BillOfLading}
 bolList [0]
 {} kTracker.BillOfLading
     _billOfLadingNumber:“CRXY99991231”
     BillOfLadingNumber:“CRXY99991231”
 bolList [1]
 {} kTracker.BillOfLading
     _billOfLadingNumber:“CRXY99991231”
     BillOfLadingNumber:“CRXY99991231”

您只创建了一个对象,并将其添加了两次。 在第一次和第二次添加之间修改该对象的事实是无关紧要的; 该列表包含对您添加的对象的引用,因此稍后将对其进行更改。

你需要替换newBol.BillOfLadingNumber = ".."; newBol = new BillOfLading("..");

Flynn1179的答案是正确的,但要回答你的评论 – 你不需要为每个对象提供不同的变量。 你可以做:

 protected void Button1_Click(object sender, EventArgs e) { BillOfLading newBol = new BillOfLading("AXSY1414114"); bolList.Add(newBol); newBol = new BillOfLading("CRXY99991231"); bolList.Add(newBol); } 

要理解的重要一点是,您没有将变量添加到列表中,也没有将对象添加到列表中……您将变量当前值添加到列表中。 该当前值是对BillOfLading实例的BillOfLading 。 在上面的代码中,列表最终引用了两个不同的对象。