小さな問題があり、あなたの意見を聞きたいです。
他のドキュメントを参照できるドキュメントを扱っています。任意のドキュメントから始めて、このドキュメントが参照するすべてのドキュメントの ID を取得する必要があります。問題は、循環参照が許可されているため、A ref B ref C の場合、C が A を参照でき、ループに入るということです。C# でこの問題を解決するにはどうすればよいですか?
小さな例:
これがドキュメントを表すクラスであるとします。
public class Document
{
public Document(int id)
{
this.ID = id;
}
private int m_ID;
public int ID
{
get { return m_ID; }
set { m_ID = value; }
}
private List<Document> m_Children = new List<Document>();
public List<Document> Children
{
get { return m_Children; }
set { m_Children = value; }
}
private List<Document> m_Parent = new List<Document>();
public List<Document> Parent
{
get { return m_Parent; }
set { m_Parent = value; }
}
public Document AddChild(Document child)
{
child.Parent.Add(this);
this.Children.Add(child);
return child;
}
public Document AddChild(int child)
{
Document d = new Document(child);
return AddChild(d);
}
}
次に、いくつかの参照を持つ Document クラスを作成しましょう。
public static Document CreateReferences()
{
Document d = new Document(1);
Document temp = d.AddChild(2);
for (int i = 3; i < 6; i++)
{
temp = temp.AddChild(i);
}
temp.AddChild(d);
return d;
}
今、次のような Document クラスにメソッドを実装する必要があります
public List<int> GetReferencedDocuments()
{ }
それを行う最善の方法は何ですか?特定のアルゴリズムを実装できますか?
どんな提案でも大歓迎です!
ありがとう