ArrayList递归,ASP.NET问题



我试图尝试递归,但在递归函数中使用ArrayList时遇到了问题。这个问题是基于这里写的另一个问题,但我没有创建树视图,而是尝试插入类别的id并获取它的子级、子级。。等属于这一类的。我使用的功能代码如下:

ArrayList arr = new ArrayList();
List<MyObject> list = new List<MyObject>();
list.Add(new MyObject() { Id = 1, Name = "Alice", ParentId = 0 });
list.Add(new MyObject() { Id = 2, Name = "Bob", ParentId = 1 });
list.Add(new MyObject() { Id = 3, Name = "Charlie", ParentId = 1 });
list.Add(new MyObject() { Id = 4, Name = "David", ParentId = 2 });
if (idCategory != "") //This is taken from querystring
{
int a = int.Parse(idCategorie);
arr = GetCategs(list, a);
foreach (int vvv in arr)
{
Label3.Text += " " + vvv.ToString();
}
}
private ArrayList GetCategs(IEnumerable<MyObject> list, int parentNode)
{
ArrayList arls = new ArrayList();
var nodes = list.Where(x => x.ParentId == parentNode);
foreach (var node in nodes)
{
int newNode = node.Id;
arls.Add(newNode);
Label1.Text += " " + newNode.ToString();
GetCategs(list, newNode);
}
foreach (int cvcv in arls)
{
Label2.Text += " " + cvcv.ToString();
}
return arls;
}

因此,我传递列表(参见我提到的示例,以了解列表的来源)和我需要的类别(或子类别)的id。我使用ArrayList来捕获所有孩子的ID,并将其插入名为arls的ArrayList中。仅出于测试目的,我使用Label1 Label2和Label3。当我运行代码时,Label1向我显示以下所有级别的子级的所有id,Label2向我显示相同的结果(这意味着id在arsl中成功传递),而Label3只显示第1级子级的id,而不是级别2(孙)或级别3(孙)的id。问题是:出了什么问题?如何解决。非常感谢。

我得到了答案。我没有将ArrayList arls传递给ArrayList arr,而是在PageLoad的内部启动arr,并直接在函数中使用它。所以现在代码看起来是这样的:
ArrayList arr = new ArrayList();//Now it can be seen by the function GetCategs
protected void Page_Load(object sender, EventArgs e)
{
List<MyObject> list = new List<MyObject>();
list.Add(new MyObject() { Id = 1, Name = "Alice", ParentId = 0 });
list.Add(new MyObject() { Id = 2, Name = "Bob", ParentId = 1 });
list.Add(new MyObject() { Id = 3, Name = "Charlie", ParentId = 1 });
list.Add(new MyObject() { Id = 4, Name = "David", ParentId = 2 });
if (idCategory != "") //This is taken from querystring
{
int a = int.Parse(idCategory);
GetCategs(list, a);
foreach (int vvv in arr)
{
Label3.Text += " " + vvv.ToString();
}
}
}
private void GetCategs(IEnumerable<MyObject> list, int parentNode)
{
var nodes = list.Where(x => x.ParentId == parentNode);
foreach (var node in nodes)
{
int newNode = node.Id;
arls.Add(newNode);
Label1.Text += " " + newNode.ToString();
GetCategs(list, newNode);
}
}

最新更新