Добавление элементов в LIST <> объектов приводит к дублированию объектов при использовании NEW в цикле - PullRequest
4 голосов
/ 12 февраля 2011
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 будет содержать два разных объекта или значения, но, похоже, этот простой код не работает. Есть идеи?

Результирующие Немедленные:

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 ]

9 голосов
/ 12 февраля 2011

Вы создали только один объект и добавили его дважды.Тот факт, что вы изменили этот объект между первым и вторым дополнением, не имеет значения;список содержит ссылку на объект, который вы добавили, поэтому последующие изменения будут применены.

Вам необходимо заменить newBol.BillOfLadingNumber = ".."; на newBol = new BillOfLading("..");

5 голосов
/ 12 февраля 2011

Ответ 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. В приведенном выше коде список заканчивается ссылками на два разных объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...