簡體   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