首页 > 解决方案 > 当我通过 foreach 循环时,它会将列表中的所有内容更改为添加的新数据?

问题描述

我有一个用于测试的方法,它获取表格行中的数据,将其转换为字符串,然后使用该Split()函数将每个不同的字符串添加到我的类中的对象中。然后我接受它并尝试将其添加到同一类的列表中。每次它通过 foreach 循环时,它只是将每个对象更新为应该添加的新数据,以便每个索引中的数据相同,而应该不同。我怎样才能解决这个问题?

这是方法:

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;

        }

标签: c#listseleniumforeach

解决方案


您正在为整个列表创建单个实例,IMUData因此在每次迭代中都为相同的引用分配了值。在迭代结束时,所有项目都将具有最后一个项目的数据,因为您只是不断更新相同的引用。

为了解决这个问题,

foreach在循环内移动下面的行

IMUItemModel IMUData = new IMUItemModel();

这将确保每次将项目添加到列表时都有新的参考。


推荐阅读