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

时间:2011-02-12 15:58:51

标签: c# list loops

List<BillOfLading> bolList = new List<BillOfLading>();

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

Count = 2
    [0]: {kTracker.BillOfLading}
    [1]: {kTracker.BillOfLading}
bolList[0]
{kTracker.BillOfLading}
    _billOfLadingNumber: "CRXY99991231"
    BillOfLadingNumber: "CRXY99991231"
bolList[1]
{kTracker.BillOfLading}
    _billOfLadingNumber: "CRXY99991231"
    BillOfLadingNumber: "CRXY99991231"

2 个答案:

答案 0 :(得分:9)

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

您需要将newBol.BillOfLadingNumber = "..";替换为newBol = new BillOfLading("..");

答案 1 :(得分:5)

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实例的引用。在上面的代码中,列表最终引用了两个不同的对象。