-
-
Save hellboy81/e5f36a1a3dc05bf8570d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class TreeNode<TName, TTag> { | |
internal TreeNodeCollection<TName, TTag> nodes; | |
public TreeNode(TName name) { | |
Name = name; | |
} | |
public TName Name { get; set; } | |
public TTag Tag { get; set; } | |
public TreeNode<TName, TTag> Parent { get; set; } | |
public TreeNodeCollection<TName, TTag> Nodes { | |
get { | |
if (this.nodes == null) { | |
this.nodes = new TreeNodeCollection<TName, TTag>(this); | |
} | |
return this.nodes; | |
} | |
} | |
} | |
public class TreeNodeCollection<TName, TTag> : IEnumerable<TreeNode<TName, TTag>> { | |
private TreeNode<TName, TTag> m_parent; | |
private List<TreeNode<TName, TTag>> m_innerList = new List<TreeNode<TName, TTag>>(); | |
internal TreeNodeCollection(TreeNode<TName, TTag> parent) { | |
m_parent = parent; | |
} | |
public TreeNode<TName, TTag> this[int index] { | |
get { | |
if (index < 0 || index >= m_innerList.Count) throw new ArgumentOutOfRangeException("index"); | |
return m_innerList[index]; | |
} | |
} | |
public int Count { | |
get { return m_innerList.Count; } | |
} | |
public void Add(TreeNode<TName, TTag> node) { | |
node.Parent = m_parent; | |
m_innerList.Add(node); | |
} | |
public void Remove(TreeNode<TName, TTag> node) { | |
m_innerList.Remove(node); | |
} | |
public TreeNode<TName, TTag> Parent { | |
get { | |
return m_parent; | |
} | |
} | |
public IEnumerator<TreeNode<TName, TTag>> GetEnumerator() | |
{ | |
return m_innerList.GetEnumerator(); | |
} | |
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() | |
{ | |
return GetEnumerator(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Generic tree implementation inspired on WinForms's
TreeView
TreeNode
/TreeNodeCollection
TName
is generic type of all nodes name (usuallystring
)TTag
is generic type of all nodes tags (usually struct/own class definition )This tag can be attached both on leaf and non-leaf nodes nodes