को देखते हुए आप निम्नलिखित वर्ग (बुरा सी #, लेकिन आप बहाव मिलता है):इस मामले में एक परिपत्र संदर्भ जांच के लिए एक अच्छा एल्गोरिदम क्या होगा?
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 कैसे लागू होगा? और, नहीं, यह होमवर्क नहीं है।
अनुभवहीन कार्यान्वयन, imo, this
और सभी बच्चों पर एक संदर्भ की जांच करते हैं, तो target
पर PerformCircularReferenceCheck फोन, this
पारित करने के लिए किया जाएगा। लेकिन मैं सोच रहा हूं कि क्या बेहतर, साबित प्रभावी, ऐसा करने के तरीके हैं, जैसे this
और target
के संदर्भों के पूरे बच्चों के पेड़ को ध्वस्त करने के लिए विधि जोड़ने और फिर परिणामों की जांच करें (ढेर पर कम दबाव?), या शायद सूची < टी> के अलावा किसी भिन्न (शायद स्वयं-जांच!) संग्रह का उपयोग कर चेक से पूरी तरह से बचें?
आप यह कैसे करेंगे?
संपादित करें: स्टीफन के रूप में बताया है, यह अगर यह लक्ष्य
यदि यह होमवर्क नहीं है, तो मैंने JSON serializer को मेरे लिए यह करने दिया। JsonConvert.SerializeObject (myObject) मौजूद होने पर एक परिपत्र संदर्भ त्रुटि फेंक देगा। –