Что делать, если я никогда не создаю новый объект, а продолжаю добавлять старый объект в список, просто обновляя его значение - PullRequest
2 голосов
/ 10 июля 2019

В цикле for вместо объявления нового объекта и добавления его в свой список я просто обновляю значение старого объекта и каждый раз продолжаю добавлять этот старый объект в свой список, почему после нескольких циклов все циклы все элементы спискастать таким же

foreach (vg_ts_VesselCashflow_CashFlow_Entity item in cashflow)
{
    var result = new VslMonthlyCashflow_Record();
    result.CapitalCost = item.CapitalCost;
    result.CharterRevenue = item.CharterRevenue;
    result.Date = item.Period;
    result.DryDock = item.DryDock;

    resultList.Add(result);
}
if (resultList != null)
    return resultList;

// По сравнению с этим:

var result = new VslMonthlyCashflow_Record();
foreach (vg_ts_VesselCashflow_CashFlow_Entity item in cashflow)
{
    result.CapitalCost = item.CapitalCost;
    result.CharterRevenue = item.CharterRevenue;
    result.Date = item.Period;
    result.DryDock = item.DryDock;

    resultList.Add(result);
}

Я ожидаю, что мой resultList будет обновлен, но если я продолжу использовать старый объект, когда он повторяется 123 раза, всеэлементы в списке будут одинаковыми.

1 Ответ

4 голосов
/ 10 июля 2019

List#Add не копирует объект или что-то подобное, он просто сохраняет ссылку на объект, который вы ему передали. Во втором фрагменте вы продолжаете добавлять один и тот же объект в список несколько раз. Каждая модификация, которую вы выполняете над объектом, видна через все ссылки, указывающие на него, включая локальную переменную result и все элементы списка.

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