【发布时间】:2011-11-11 16:18:23
【问题描述】:
哇哦!我要发布一个关于堆栈溢出的问题...关于 stackoverflow :)
所以可能只是现在是星期五,我的大脑已经炸了,但我正在尝试编写一个类,该类使用从 TreeNode 继承的通用类型对象和一个简单的接口递归填充给定的 TreeView。
由于某种原因,我在尝试填充节点时遇到了 stackoverflow 异常。
我的简单界面:
public interface ITreeNode
{
int ItemID { get; set; }
int ParentID { get; set; }
}
递归代码:
public void SetNodes(int rootId)
{
foreach (T root in _nodeList.Where(i => i.ParentID == rootId))
{
_tree.Nodes.Add(root);
addBrowserItems(root);
}
}
private void addBrowserItems(T parentNode)
{
foreach (T child in _nodeList.Where(i => i.ParentID == parentNode.ItemID))
{
parentNode.Nodes.Add(child);
addBrowserItems(child);
}
}
【问题讨论】:
-
@Aliostad - 让我想起了评论中的一首歌。
-
代码对我来说看起来不错。您是否已介入以确保您的数据正常?
-
当您的
_nodeList包含循环时,您的堆栈将溢出。 -
@Adam 如果我延迟加载数据,它工作得很好
-
Ohhhh - @Henk 搞定了。你的树有一个循环。循环引用。节点 X 有一个父节点,它有一个父节点,它的父节点是 X。或者是一些类似的令人费解的边缘情况,它已经潜入你的数据中。
标签: c# recursion treeview stack-overflow