我有一个 C# 类,名为 Pose。它的功能并不重要,但它包含另一个名为 _parent 的 Pose 和一个名为 _children 的列表作为字段。在 _parent 的 setter 中,我需要确保设置父级不会导致循环依赖,因为这最终会导致其他方法中的无限递归循环。
public Pose Parent
{
get => _parent;
set
{
if (WouldCauseCircularDependency(value)) throw new ArgumentException("Cannot set a parent that causes a circular dependency");
_parent?._children.Remove(this);
_parent = value;
_parent?._children.Add(this);
MarkPoseDirty();
}
}
bool WouldCauseCircularDependency(Pose potentialParent)
{
return false; // TODO
}
我怎样才能实现我的WouldCauseCircularDependency()方法来防止这种情况?
我不太确定这样做所需的逻辑。
编辑:也许我已经在这里回答了我自己的问题,但我是否只需要检查潜在的父母是否已经是当前姿势的孩子(或孙子等)?
是的。将其视为两个操作:分离和附加。分离树的一个分支后,您将拥有两棵独立的树。现在是把一棵树附加到另一棵树上,所以附加到它自己肯定是错误的。
实施方面