ArrayList递归,ASP.NET问题

ArrayList递归,ASP.NET问题,asp.net,recursion,arraylist,Asp.net,Recursion,Arraylist,我尝试过递归,但在递归函数中使用ArrayList时遇到了一个问题。这个问题是基于另一个写的问题,但是我没有创建一个树状视图,而是尝试插入类别的id并获取它的子级、子级。。等属于这一类的。我使用的函数代码如下: ArrayList arr = new ArrayList(); List<MyObject> list = new List<MyObject>(); list.Add(new MyObject() { Id = 1, Name

我尝试过递归,但在递归函数中使用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;
}
ArrayList arr=new ArrayList();
列表=新列表();
添加(新的MyObject(){Id=1,Name=“Alice”,ParentId=0});
添加(新的MyObject(){Id=2,Name=“Bob”,ParentId=1});
添加(新的MyObject(){Id=3,Name=“Charlie”,ParentId=1});
添加(新的MyObject(){Id=4,Name=“David”,ParentId=2});
if(idCategory!=“”)//这是从querystring获取的
{
int a=int.Parse(idCategorie);
arr=GetCategs(列表,a);
foreach(arr中的int vvv)
{
Label3.Text+=“”+vvv.ToString();
}
}
私有ArrayList GetCategs(IEnumerable列表,int parentNode)
{
ArrayList arls=新的ArrayList();
var nodes=list.Where(x=>x.ParentId==parentNode);
foreach(节点中的var节点)
{
int newNode=node.Id;
arls.Add(newNode);
Label1.Text+=“”+newNode.ToString();
GetCategs(列表,新节点);
}
foreach(arls中的int cvcv)
{
Label2.Text+=“”+cvcv.ToString();
}
返回ARL;
}
因此,我传递列表和我需要的类别(或子类别)的id。我使用ArrayList捕获所有孩子的ID,并将其插入名为arls的ArrayList中。仅出于测试目的,我使用Label1、Label2和Label3。当我运行代码时,Label1向我显示下面所有级别的子级的所有id,Label2向我显示相同的结果(这意味着在arsl中成功通过的id),而Label3仅显示1级子级的id,而不是级别2(孙子)或级别3(孙辈)的id。问题是:有什么问题?怎么解决呢?。
谢谢。

我得到了答案。我没有将ArrayList ARL传递给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);
    }
}
ArrayList arr=new ArrayList()//现在可以通过函数GetCategs看到它
受保护的无效页面加载(对象发送方、事件参数e)
{
列表=新列表();
添加(新的MyObject(){Id=1,Name=“Alice”,ParentId=0});
添加(新的MyObject(){Id=2,Name=“Bob”,ParentId=1});
添加(新的MyObject(){Id=3,Name=“Charlie”,ParentId=1});
添加(新的MyObject(){Id=4,Name=“David”,ParentId=2});
if(idCategory!=“”)//这是从querystring获取的
{
int a=int.Parse(idCategory);
GetCategs(列表,a);
foreach(arr中的int vvv)
{
Label3.Text+=“”+vvv.ToString();
}
}
}
私有void GetCategs(IEnumerable列表,int parentNode)
{
var nodes=list.Where(x=>x.ParentId==parentNode);
foreach(节点中的var节点)
{
int newNode=node.Id;
arls.Add(newNode);
Label1.Text+=“”+newNode.ToString();
GetCategs(列表,新节点);
}
}

看起来您的原始列表中没有孙子、曾孙。你能发布列表的值吗?另外,您没有使用这个递归方法的返回值。我稍微更改了它,以便可以使用返回值。问题实际上是将值返回给函数的调用方。我又测试了一次!arls arraylist包含我需要的所有信息,而arr arraylist只包含一级子级!似乎对我来说很好,我会确保
list
具有您期望的值