gpt4 book ai didi

c# - 从列表中删除项目以及对它们的所有引用

转载 作者:太空狗 更新时间:2023-10-29 20:22:28 24 4
gpt4 key购买 nike

我面临这样一种情况,我有依赖对象,我希望能够删除一个对象及其所有引用。

假设我有一个类似于下面代码的对象结构,其中有一个引用两个节点的 Branch 类型。

public class Node
{
// Has Some Data!
}

public class Branch
{
// Contains references to Nodes
public Node NodeA
public Node NodeB
}

public class Graph
{
public List<Node> Nodes;
public List<Branch> Branches;
}

如果我从 Graph 类的节点列表中删除一个节点,一个或多个 Branch 对象仍然可能包含对已删除节点的引用,从而将其保留在内存中,而我真正想要的是是将对已删除节点的任何引用设置为 null 并启动垃圾回收。

除了枚举每个 Branch 并按顺序检查每个 Node 引用之外,关于如何删除每个 Branch 实例中对 Node 的引用以及引用已删除 Node 的任何其他类,是否有任何聪明的想法?

最佳答案

没有内置的 C# 语言功能来促进这一点(您无法真正跟踪分配)。您必须在某处跟踪所有引用,并在为其分配新引用后立即更新它。一个非常普遍的想法是在 Node 本身中提供一个 Removed 事件,并在对象应该被放弃时引发该事件。每次您想要保留对 Node 的新引用时,您都需要使用匹配的委托(delegate)来订阅该事件,该委托(delegate)会使对该对象的引用无效。当然,如果您使用一组以特定方式引用节点的先前已知类型来执行此操作,则可能有更简单、更有效的方法来完成任务。

关于c# - 从列表中删除项目以及对它们的所有引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2724744/

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