今天在用Microsoft.Web.UI.WebControls.TreeView中发现了这个bug。
递归过程是加载目录树,用递归的方法一层层加载目录。
我创建一个DataTable来递归:



























































































我跟踪调试发现如下过程:
1、首先加载parentNodeID=1的所有结点,包括2个结点,其ChapterID分别为2,3。

2、可见事实上也是Count=2,如下图

3、递归第一次parentNodeID=2。

4、验证parentNodeID=2,也正确。

5、当第一次递归完成了,按道理要递归下一个parentNodeID=3了。

6、这时候确实也回到了上一级,也就是parentNodeId=1的时候。这里i的值是还没有++,++后i为1。

7、这时候bug出现了,dvTree.Count应该和第2步一样为2,可这里怎么就成了0了呢?
我猜,在实现编译器的时候,应该把dvTree保存为临时的DataView,这里把递归第一次的dvTree拿来用了。每一次递归都必须保存前一级别的DataView。事实上,却没有,DataView被丢了。上一级别的DataView和自身一级别的DataView原本就是不同的。

附上代码: TestWeb.rar