鉴于你有下面的类(坏的C#,但你的漂移):在这种情况下,循环引用检查的算法是什么?
public abstract class AmICircular
{
// assume Children is never null
private List<AmICircular> Children {get;set;}
// assume target is never null
public void Add(AmICircular target)
{
target.PerformCircularReferenceCheck(this);
Children.Add(target);
}
// throws when a circular reference is detected
protected abstract void PerformCircularReferenceCheck(AmICircular target);
}
你将如何实现PerformCircularReferenceCheck?不,这不是家庭作业。
天真的实施,国际海事组织,是做一个参考检查的this
和所有的孩子,然后调用PerformCircularReferenceCheck上target
,传递this
。但是我想知道是否有更好的,经过验证的有效的方法来执行此操作,例如添加一个方法来折叠整个参考文献的子树this
和target
,然后检查结果(减少堆栈压力?),或者也许完全避免使用除列表< T>以外的其他(可能是自检!)集合的检查?
你会如何做到这一点?
编辑:作为斯特凡指出的那样,仅仅需要以确定这是否是由所述目标
如果它不是家庭作业,那么我让JSON序列化程序为我做。如果存在,JsonConvert.SerializeObject(myObject)将抛出循环引用错误。 – 2016-02-25 22:12:52