c# - 当我通过 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;
}
解决方案
您正在为整个列表创建单个实例,IMUData
因此在每次迭代中都为相同的引用分配了值。在迭代结束时,所有项目都将具有最后一个项目的数据,因为您只是不断更新相同的引用。
为了解决这个问题,
foreach
在循环内移动下面的行
IMUItemModel IMUData = new IMUItemModel();
这将确保每次将项目添加到列表时都有新的参考。