c# - C# List.Add 覆盖以前的对象
问题描述
我正在尝试创建一个简单的对象列表,但是在每个 foreach 循环中,以前的记录都被新的循环覆盖,以前的记录被新记录覆盖。因此,如果 realData 中有 6 个条目,则列表将具有最后一条记录的 6 倍。
我是否以某种方式重新创建列表而不是添加到列表中?还有另一种我忽略的创建列表的方法吗?
我的代码是
public async Task<IActionResult> OrderOverview()
{
var itemList = new List<OrderItemVM>();
var realData = await _context.OrderItem.ToListAsync();
var orderItemVM = new OrderItemVM();
foreach (var item in realData)
{
orderItemVM.Id = item.Id;
orderItemVM.OrderId = item.OrderId;
orderItemVM.OrderName = _context.Order.Find(item.OrderId).OrderName;
orderItemVM.ItemName = item.ItemName;
itemList.Add(orderItemVM);
}
return View(itemList);
}
解决方案
您正在修改先前添加的对象,而不是添加新对象。你应该做这个。
foreach (var item in realData)
{
OrderItemVM orderItemVM = new OrderItemVM ();
orderItemVM.Id = item.Id;
orderItemVM.OrderId = item.OrderId;
orderItemVM.OrderName = _context.Order.Find(item.OrderId).OrderName;
orderItemVM.ItemName = item.ItemName;
itemList.Add(orderItemVM);
}
因此,基本上在每次迭代中,您都会创建一个新的空对象,然后分配该值并将其添加到 List 中。
推荐阅读
- c - 有没有办法查找 kobject 的引用计数?
- java - Hibernate Entity 在“相同范围”中等于 var null 而不是 null
- javascript - 使用推送通知订阅对象的“p256dh”或“endpoint”键值作为后端中的标识符是否安全?
- c - 这个条目是如何从这个文件中删除的?
- javascript - 在 styled-components 声明中通过 settimeout 返回样式
- matplotlib - 使用 `with` 恢复 Matplotlib 默认样式
- sql - 将多行合并为单行
- sql - 如何从不同的表中计算和求和(SQL)
- javascript - Django cookie 横幅:window.wpcc 未定义
- docker - 如何重新初始化 Docker 容器