繁体   English   中英

C# List.Add 覆盖以前的对象

[英]C# List.Add overwrites previous objects

我正在尝试创建一个简单的对象列表,但不知何故在每个 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 中。

发生这种情况是因为您将orderItemVM的相同引用插入到itemList 此外,您可以为itemList设置默认大小并提高性能。

var realData = await _context.OrderItem.ToListAsync();     
var itemList = new List<OrderItemVM>(realData.Count);

对于此任务,您可以使用 LINQ:

    public async Task<IActionResult> OrderOverview()
    {
        var realData = await _context.OrderItem.ToListAsync();
        var itemList = realData.Select(item => new OrderItemVM
        {
            Id = item.Id,
            OrderId = item.OrderId,
            OrderName = _context.Order.Find(item.OrderId).OrderName,
            ItemName = item.ItemNam,
        }).ToList();

        return View(itemList);
    }

感谢 Lasse V. Karlsen 我发现了这个错误。 我在 Foreach 循环中移动了行var OrderItemVM = new OrderItemVM 那解决了它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM