gpt4 book ai didi

c# - 添加到列表后修改项目不会更新列表

转载 作者:行者123 更新时间:2023-11-30 13:48:50 25 4
gpt4 key购买 nike

我有一个成员变量,它是一个引用类型列表。在我创建和项目的方法中,将其添加到列表中。然后将该项目更新为指向另一个实例,但列表中的实例不会更新(他在某些单元测试代码中)。例子看起来像

Item localItem = new Item(arg1, arg2);
this.itemList.Add(localItem);

// Do some testing and assertions

localItem = new Item(arg3, arg4); // This does not update the instance of
// localItem in this.ItemList

// Do some more testing and assertions

我可以更新我的测试来解决这个问题,但它仍然让我感到惊讶。我假设 List 想要保留通过 Add 方法传递的原始实例,而不关心用于传递它的局部变量现在是否指向其他内容。谁能证实这种理解或更清楚地解释一下?

最佳答案

当然不是。 localItem 是对实际对象(不是对象本身)的引用。该列表还包含对同一对象的引用。如果您将另一个项目分配给 localItem,它现在指向另一个对象,但列表仍然引用旧对象。

如果您希望列表中的对象自动更新,您必须引入一个新对象来保存对该项目的引用并将其添加到列表中

public class ItemReference
{
public Item Item { get; set; }
}

现在你可以像这样创建一个本地项目

ItemReference itemRef = new ItemReference();
itemRef.Item = new Item(arg1, arg2);

this.itemReferenceList.Add(itemRef);
itemRef.Item = new Item(arg3, arg4);

因为列表现在引用了相同的(未更改的)itemRef,所以它也“看到”了新项目。

列表必须声明为

List<ItemReference> itemReferenceList;

关于c# - 添加到列表后修改项目不会更新列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11250081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com