0

我尝试尝试递归,但在递归函数中使用 ArrayList 时遇到问题。这个问题是基于写在这里的另一个问题,但我没有创建 TreeView,而是尝试插入类别的 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 向我显示相同的结果(这意味着在 arsl 中成功传递的 ID),而 Label3 仅显示 id 1 级孩子不是 2 级(孙子)或 3 级(孙子)的孩子。问题是:有什么问题?如何解决。谢谢你。

4

1 回答 1

0

我得到了答案。我没有将 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);
    }
}
于 2012-11-20T21:10:26.707 回答