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

#c# #foreach #nested

#c# #foreach #вложенный

Вопрос:

У меня есть 2 цикла foreach, вложенных следующим образом:

 foreach (var item in temp)
{
    foreach (var merge in distrolist)
    {
        if(merge.Name.Equals(item.Name) amp;amp; !merge.Projeid.Equals(item.Projeid))
        {
            item.Amount  = merge.Amount;
        }
    }
}
  

этот код при выполнении изменяет количество объекта слияния в списке дистрибутивов. Я совершенно не понимаю, почему. Теперь, интересная часть заключается в том, что измененный объект на самом деле не является текущим объектом слияния в цикле, а не предыдущим объектом в списке дистрибутивов. Temp и distrolist имеют один и тот же общий тип. Я не уверен, что еще добавить, но если вы хотите увидеть больше деталей, я могу отредактировать вопрос.

Комментарии:

1. Здесь вам нужно будет показать соответствующие части кода, т. Е. как distrolist создается и как temp создается, а также полные определения типов для обоих. Возможно, что типы являются ссылочными типами и они ссылаются на один и тот же экземпляр объекта

2. Очень хорошо, я сейчас отредактирую

3. весьма вероятно, что и temp, и distrlist содержат одинаковые экземпляры слияния

4. Да, по-видимому, они делают. Я немного почищу код, большое спасибо

5.Я думаю, вопрос был бы понятнее, если бы вы предоставили примеры данных и объяснили, что это должно на самом деле делать. Похоже, вы пытаетесь сделать следующее: для каждого элемента во временном режиме вы увеличиваете значение элемента Amount на сумму Amount всех элементов в distroList , которые имеют то же имя, что и item , но другое Projeid . Предназначено ли это? Я понятия не имею, что такое бизнес-модель….