Когда я прохожу через foreach l oop, он меняет все в моем списке на добавление новых данных? - PullRequest
1 голос
/ 14 июля 2020

У меня есть метод, который я использую для теста, который берет данные из строки таблицы, превращает их в строку, а затем использует функцию Split() для добавления каждой отдельной строки к объекту в моем классе. Затем я беру его и пытаюсь добавить в список того же класса. Каждый раз, когда он проходит через foreach l oop, он просто обновляет каждый объект новыми данными, которые должны быть добавлены, чтобы данные были одинаковыми в каждом индексе, тогда как предполагалось, что они будут разными. Как я могу это исправить?

Вот способ:

public List<IMUItemModel> tableData()
        {
            _webDriver.Wait.UntilPageLoadIsComplete(60);
            List<IMUItemModel> IMUDataList = new List<IMUItemModel>();
            IMUItemModel IMUData = new IMUItemModel();
            
            foreach (var row in IMUDataTableRows)
            {
                string column = row.Text;
                var split = column.Split(' ');
                IMUData.MedVendID = split[0];
                IMUData.DeviceSerialNumber = split[1];
                IMUData.ItemID = split[2];
                IMUData.Station = split[3];
                IMUData.Console = split[4];
                IMUDataList.Add(IMUData);
                Console.WriteLine(IMUData.MedVendID);

            }
            return IMUDataList;

        }

1 Ответ

2 голосов
/ 14 июля 2020

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

Чтобы исправить это,

переместите строку ниже внутри foreach l oop

IMUItemModel IMUData = new IMUItemModel();

Это гарантирует, что у вас будет новая ссылка каждый раз, когда вы добавляете элемент в список.

...