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に挿入します。テストの目的で、Label1Label2とLabel3を使用します。コードを実行すると、Label1は以下のすべてのレベルの子のすべてのIDを表示し、Label2は同じ結果を表示します(これは、arslで正常に渡されたIDを意味します)が、Label3はのIDのみを表示しますレベル2(孫)またはレベル3(孫)の子供ではなく、第1レベルの子供。問題は、何が問題なのかということです。どうすれば解決できますか。ありがとうございました。

4

1 に答える 1

0

私は答えを得ました。ArrayListarlsをArrayListarrに渡す代わりに、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 に答える