Entwickler-Ecke

C# - Die Sprache - Letztes Kind suchen gibt StackOverFlow


IngoM - Mo 15.11.10 22:44
Titel: Letztes Kind suchen gibt StackOverFlow
Hallo!

Habe folgendes programmiert, gibt aber in markierter Zeile nen StackOverFlow!
Diese Funktion soll das letzte unterkind der Hauptklasse herausfinden.
Die letzten Unterkinder, bei denen die Klasse "clsEntnahmestelle" Entnahmestelle = null ist, sollen einen Error ausgeben.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
        public ListBox NextChilds(clsLeitung aCurrentChild, ListBox Errortext)
        {
            ListBox result = Errortext;
                foreach (clsLeitung i in aCurrentChild.Kindleitung)  //<--- hier kommt der Fehler
                {
                    if (i.Kindleitung.Count > 0)
                    {
                        ListBox newresult = NextChilds(aCurrentChild, result);
                        for (int m = 0; m < newresult.Items.Count; m++)
                        {
                            result.Items.Add(newresult.Items[m]);
                        }
                    }
                    else
                    {
                        LastChilds.Add(i);
                        if (i.Entnahmestelle == null)
                        {
                            result.Items.Add("Error: Der Teilstrecke \"" + i.Name + "\" wurde keine Entnahmestelle oder Teilstrecke zugeordnet");
                        }
                    }
                }
            return result;
        }
        /// <summary>
        /// Gibt das tiefste Kind des Elternelements zurück.
        /// </summary>
        /// <param name="CurrentChild">Elternelement</param>
        /// <returns>Tiefstes Kind</returns>
        public ListBox InitLastChilds(clsLeitung aFirstChild)
        {
            ListBox result = new ListBox();

                if (aFirstChild.Kindleitung.Count > 0)
                {
                    ListBox newresult = NextChilds(aFirstChild, result);
                    for (int n = 0; n < newresult.Items.Count; n++)
                    {
                        result.Items.Add(newresult.Items[n]);
                    }
                }
                else
                {
                    LastChilds.Add(aFirstChild);
                    if (aFirstChild.Entnahmestelle == null)
                    {
                        result.Items.Add("Error: Der Teilstrecke \"" + aFirstChild.Name + "\" wurde keine Entnahmestelle oder Teilstrecke zugeordnet");
                    }
                }
            return result;
        }


Kha - Mo 15.11.10 23:34

:welcome: in der EE!

Wenn du dir deinen Code noch einmal anschaust, sollte dir auffallen, dass du die Methode rekursiv wieder mit den exakt gleichen Parametern aufrufst, das kann ja nur in einer Endlosrekursion enden.

PS: Children ;)


IngoM - Di 16.11.10 18:17

Oh man ich Vollidiot ;)

Danke dir, da starrt man ewig drauf und rafft es nicht ^^

PS Danke fürs Willkommen, bin aber eigtl schon lange angemeldet und war immer im Delphi-Forum unterwegs, hab aber irgendwie keine Beiträge mehr die ich gepostet hatte.
ka :) War auch schon lange nicht mehr da, aber sagen wir einfach ComeBack ;)