因此,在长期担任网络管理员之后又回到编码中,并在我学习C#(和Unity)的过程中。试图把我的头缠在IEnumerable
和IEnumerator
现在,这是我用来测试/配置它的类的示例代码...它可以工作,可以递归地创建树/叶节点,但是我仍然坚持检索它们
public class NodeTest : IEnumerable
{
public int Counter;
public List<NodeTest> children;
public NodeTest(int count)
{
Counter = count;
Debug.Log("Creating " + count);
NodeTest tmpNode;
if(count>1)
{
children = new List<NodeTest>();
tmpNode = new NodeTest(Counter - 1);
children.Add(tmpNode);
tmpNode = new NodeTest(Counter - 1);
children.Add(tmpNode);
}
}
public IEnumerator GetEnumerator()
{
foreach(NodeTest n in this.children)
{
yield return n;
}
}
}
然后在我使用的其他地方:
foreach(NodeTest nt in tstNode)
{
Debug.Log(nt.Counter);
}
哪个可以很好地检索顶部节点的子节点,但不遍历子节点来获取其子节点等。我猜想我必须在IEnumerator
GetEnumerator
方法中做更多的事情?
答案 0 :(得分:2)
您需要将NodeTest.GetEnumerator
设为递归方法。除了返回每个孩子之外,您还需要让每个孩子返回所有孩子。 (这将使每个孩子的孩子返回自己的孩子,等等)。
public IEnumerator GetEnumerator()
{
foreach(NodeTest n in this.children)
{
yield return n;
foreach(NodeTest descendent in n)
{
yield return descendent;
}
}
}