2014-01-04 4 views
0

Я пытаюсь построить иерархию данных и у меня есть следующий код:Создать иерархию данных и передать

public class TreeData 
{ 
    public string parent { get; set; } 
    public string child { get; set; } 
    public List<TreeData> thisTree { get; set; } 

    public void Add(string parent, string child) 
    { 
     this.parent = parent; 
     this.child = child; 
    } 

    public void Add(List<TreeData> myList) 
    { 
     this.thisTree = myList; 
    } 

} 

У меня также есть это использовать:

TreeData myTree = new TreeData(); 
myTree.Add("Alan", "Dan"); 

TreeData myTree1 = new TreeData(); 
myTree1.Add("Dan", "Heidi"); 
myTree1.Add(myTree); 

Однако я не может пройти myTree до моего Add, так как это не List, что мне нужно сделать, чтобы иметь возможность пройти myTree назад в мой класс?

Спасибо, Dan

+0

Вы должны проверить 'LinkedList'. Возможно, это лучший способ перейти на http://msdn.microsoft.com/en-us/library/he2s3bh7(v=vs.110).aspx – geedubb

ответ

1

Для древовидную класса, я предлагаю использовать следующую структуру:

public class TreeData 
{ 
    public TreeData Parent { get; private set; } 
    public string ID { get; private set; } 
    public List<TreeData> Child { get; private set; } 

    //Constructor for root objects 
    public TreeData(string id) : this(null, id) 
    { 
    } 

    //Constructor for child objects 
    public TreeData(TreeData parent, string id) 
    { 
     this.ID = id; 
     this.Parent = parent; 
     this.Child = new List<TreeData>(); 
    } 

    public TreeData Add(string childID) 
    { 
     TreeData child = new TreeData(this, childID); 
     this.Child.Add(child); 
     return child; 
    } 

} 

Таким образом, каждый узел имеет доступ к родителю и порожденных

TreeData alanNode = new TreeData("Alan"); 
TreeData danNode = alanNode.Add("Dan"); 
danNode.Add("Heidi"); 
+0

Спасибо - это именно то, что я пытался сделать. – user1896017

0

Почему вы не изменить подпись

public void Add(string parent, string child) 

в

public void Add(TreeData parent, TreeData child) 
+0

Привет. Это решение проблемы сразу, но затем я не могу заполнить thisTree myList, потому что myList не является списком. корень проблемы - мне нужно определить myClass TreeData как сам список, я думаю. – user1896017

+0

Я говорил о первом методе Add. Проверьте мое новое редактирование. –

0

Я думаю, все, что вам нужно сделать, это что-то вроде этого:

public class TreeData 
{ 
    private TreeData _child; 

    public string Name { get; set; } 
    public TreeData Next 
    { 
     get { return _child; } 
     set { _child = value; } 
    } 
} 


TreeData myTree = new TreeData("root"); 
TreeData child1 = new TreeData("child1"); 
TreeData child2 = new TreeData("child2"); 
myTree.Next = child1; 
child1.Next = child2; 

Если вы хотите один TreeData может иметь более одного ребенка, вы может расширить этот класс, как это:

public class TreeData 
{ 
    private TreeData _parent; 
    private List<TreeData> childs = new List<TreeData>(); 
    public TreeData(string name) 
    { 
     Name = name; 
    } 

    public void AddChild(TreeData child) 
    { 
     child.Parent = this; 
     childs.Add(child); 
    } 

    public string Name { get; set; } 
    public TreeData Parent 
    { 
     get { return _parent; } 
     set { _parent = value; } 
    } 


    public List<TreeData> Childs 
    { 
     get { return childs; } 
    } 
} 

Тогда:

TreeData myTree = new TreeData("root); 
TreeData child1 = new TreeData("child1"); 
TreeData child2 = new TreeData("child2"); 

myTree.AddChild(child1); 
myTree.AddChild(child2); 
Смежные вопросы