鑑於你有下面的類(壞的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