Поскольку вы на самом деле никогда не изменяете (для нового объекта) объект, на который указывает ваш itemA в памяти, все, что вы получаете, это список, например, 100 записей, которые все просто указывают на один и тот же единственный экземпляр ItemA в памяти
В терминах, с которыми вы, возможно, более знакомы, ваши new ItemA()
данные подобны текстовому файлу на диске, а itemA - это ярлык для него. Вызов list.Add(itemA)
(или связывание другой переменной, например var itemA2 = itemA
) просто создает еще один ярлык для того же файла, а не копирует файл в другой файл.
Если вы дважды щелкните ярлык itemA
, чтобы открыть файл в блокноте, отредактировать содержимое, сохранить его, закрыть, а затем дважды щелкнуть ярлык itemA2
, то вы не удивитесь, увидев, что блокнот открывается с файл с вашими изменениями
Это то, что C# делает, когда вы создаете объекты
var myShortcut1 = new RealDataSomewhere();
var myShortcut2 = myShortcut1; //not a copy, another shortcut to the same realdata
var myArrayOfShortcuts = new [] { myShortcut1, myShortcut1, myShortcut1, myShortcut1, myShortcut1}; //every array index is also a shortcut
//at this point there is still only one RealDataSomewhere object in memory and now 7 shortcuts to it
Либо клонируйте свой itemA до / после того, как вы что-то с ним сделаете, добавив клоду в список , или создавайте новый itemA на каждом проходе l oop. Что из этого вы на самом деле делаете, зависит от того, что остальная часть кода (мы не можем видеть) делает с элементом A
клонирование,