Autor Beitrag
IngoM
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mo 15.11.10 22:44 
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.

ausblenden volle Höhe 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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 ;)

_________________
>λ=

Für diesen Beitrag haben gedankt: IngoM
IngoM Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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 ;)