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

dotNet Framework1.1.4322的递归bug?using System;
dotNet Framework1.1.4322的递归bug?
using Microsoft.Web.UI.WebControls;
dotNet Framework1.1.4322的递归bug?
using System.Data;
dotNet Framework1.1.4322的递归bug?
dotNet Framework1.1.4322的递归bug?
namespace TestWeb

我跟踪调试发现如下过程:
1、首先加载parentNodeID=1的所有结点,包括2个结点,其ChapterID分别为2,3。
dotNet Framework1.1.4322的递归bug?
2、可见事实上也是Count=2,如下图
dotNet Framework1.1.4322的递归bug?
3、递归第一次parentNodeID=2。
dotNet Framework1.1.4322的递归bug?
4、验证parentNodeID=2,也正确。
dotNet Framework1.1.4322的递归bug?
5、当第一次递归完成了,按道理要递归下一个parentNodeID=3了。
dotNet Framework1.1.4322的递归bug?
6、这时候确实也回到了上一级,也就是parentNodeId=1的时候。这里i的值是还没有++,++后i为1。
dotNet Framework1.1.4322的递归bug?
7、这时候bug出现了,dvTree.Count应该和第2步一样为2,可这里怎么就成了0了呢?
我猜,在实现编译器的时候,应该把dvTree保存为临时的DataView,这里把递归第一次的dvTree拿来用了。每一次递归都必须保存前一级别的DataView。事实上,却没有,DataView被丢了。上一级别的DataView和自身一级别的DataView原本就是不同的。
dotNet Framework1.1.4322的递归bug? 

附上代码: TestWeb.rar

相关文章:

  • 2022-01-25
  • 2021-12-23
  • 2022-01-06
  • 2021-09-18
  • 2022-12-23
  • 2021-06-22
  • 2021-09-26
  • 2021-07-08
猜你喜欢
  • 2021-06-07
  • 2022-12-23
  • 2022-02-09
  • 2021-12-19
  • 2021-07-24
  • 2022-12-23
  • 2021-09-05
相关资源
相似解决方案