Eğer aşağıdaki sınıf var Verilen (kötü C#, ama drift olsun):Bu durumda dairesel referans kontrolü için iyi bir algoritma ne olurdu?
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);
}
nasıl PerformCircularReferenceCheck uygulamak? Ve hayır, bu ev ödevi değil.
naif uygulanması, imo, this
geçen zaman, this
ve tüm çocuklar üzerinde bir referans kontrol yapmak target
tarihinde PerformCircularReferenceCheck çağırmak olacaktır. Ama ben daha iyi, kanıtlanmış etkili, bu yolu, this
ve target
için referanslar tüm çocuk ağacı daraltmak için bir yöntem eklemek ve daha sonra sonuçları (yığın üzerinde daha az basınç?), Veya Muhtemelen çeki tamamen List < T> dışında farklı bir (belki de kendi kendine kontrol!) koleksiyonu kullanarak kaçının!
Bunu nasıl yapardın?
düzenleme: Stefan belirttiği gibi, bu hedef yinelemeli solüsyonu (ulaşılabilir) ve CR bir dizi R (ulaşılabilir çocukları) tanımlamaktır
Ödev değilse, JSON serileştiricisinin benim için yapmasına izin verdim. Varsa, JsonConvert.SerializeObject (myObject) dairesel bir referans hatası atar. –