13. februar 2009 - 21:08
Der er
11 kommentarer og 1 løsning
Hjælp til en recursiv function
Hejsa, Jeg har en generic list som jeg skal lave en rekursiv metode til. Jeg er kommet frem til dette : private string loadSites(int id, List<Site> data) { string result = ""; result += "<nodes>"; foreach (Site site in data) { result += "<node text=\""+ site.MenuName +"\" url=\""+ site.SiteUrl +"\">"; loadSites(site.Id, data); result += "</node>"; } result += "</nodes>"; return result; } Det virker dog ikke helt som det skal. Når jeg kalder min metode inde i loopen crasher skidtet. Er der en der kan hjælpe mig færdig med dette ? /websam
Annonceindlæg fra Cognizant
13. februar 2009 - 21:23
#1
En rekursiv funktion skal starte med en "if" der afgør om man er færdig. Du har ingen "if". Hvad er kriteriet for at stoppe? (...eller en "if" et andet sted i funktionen...)
13. februar 2009 - 21:29
#2
Jeg har to felter i min database Id og ParentId. Alle top noder har ParentId = 0 og under noder har så ParentId = Id, så hvis en top node har under noder skal functionen loades igen. Gav det nogen mening ?
13. februar 2009 - 21:38
#3
Nej ;) Hvad indeholder dit site-object? Og hvad skal du med Id, når du ikke bruge det?
13. februar 2009 - 21:48
#4
Mit site object indeholder : Id, ParentId, MenuName og SiteUrl og resultatet skal være noget i stil med dette : Node 1 - Node 1.1 - Node 1.2 Node 2 - Node 2.1 -- Node 2.1.1 -- Node 2.1.2 - Node 2.2 Node 3 - Node 3.1 - Node 3.2 Altså skal jeg rende min generic list igennem for at liste alle top noder med tilhørende under noder. Og for at forklare top/under noder så ser Id og ParentId således ud i min database: 1 - 0 2 - 0 3 - 1 4 - 2 5 - 2 6 - 3 Altså alle top noder har ParentId = 0 og alle undernoder har ParentId = Id der høre til over noden. Hjalp det på det ?
13. februar 2009 - 21:53
#5
Måååske noget i retning af: private string loadSites(int id, List<Site> data) { string result = ""; result += "<nodes>"; foreach (Site site in data) { if (site.ParentId==id) { result += "<node text=\""+ site.MenuName +"\" url=\""+ site.SiteUrl +"\">"; loadSites(site.Id, data); result += "</node>"; } } result += "</nodes>"; return result; } kald den med loadSites(0,data);
13. februar 2009 - 22:08
#6
Ja så kommer den da ikke med fejl mere ;o) Men den loader kun top noderne så if sætningen må ikke være rigtig ?
13. februar 2009 - 22:31
#7
Jo, den er korrekt nok. Men du skal nok rette loadSites(site.Id, data); til result+=loadSites(site.Id, data);
13. februar 2009 - 22:56
#8
Ok det hjalp da lidt mere på det så skal jeg bae lige have styr på disse to : result += "<nodes>"; result += "</nodes>"; De skal kun laves først og sidst, som en wrapper om noderne, men det kommer til at se således ud : <nodes> <node text="Forside" url="forside.aspx"> <nodes><-- DUER IKKE <node text="Om os" url="omos.aspx"> <nodes></nodes><-- DUER IKKE </node> <node text="Kontakt" url="kontakt.aspx"> <nodes></nodes><-- DUER IKKE </node> </nodes><-- DUER IKKE </node> <node text="Ledige Stillinger" url="ledige-stillinger.aspx"> <nodes><-- DUER IKKE <node text="Montør" url="montor.aspx"> <nodes></nodes><-- DUER IKKE </node> <node text="Sælger" url="saelger.aspx"> <nodes></nodes><-- DUER IKKE </node> </nodes><-- DUER IKKE </node> </nodes>
13. februar 2009 - 23:06
#9
Så skal du gøre det udenfor funktionen: String s=""; s+="<nodes>"; s+=loadSites(0,data); s+="</nodes>";
13. februar 2009 - 23:24
#10
Ja det fandt jeg også frem til ;o) Smid et svar så er der point på vej og tak for hjælpen.
13. februar 2009 - 23:27
#11
Jeg samler slet ikke på point, tak. Svar selv, og accepter dit eget svar.
17. februar 2009 - 10:59
#12
Ok
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.