14. februar 2005 - 20:17
Der er
17 kommentarer og 1 løsning
ArrayList i ArrayList i ArrayList
Hejsa Jeg har en ArrayList der er fyld med andre ArraysList's og disse indeholder så hver en struct. Nu vil jeg gerne vide hvordan man går ned og ændrer et property i en af disse structs ? /Tand
Annonceindlæg fra Computerworld it-jobbank
14. februar 2005 - 20:21
#1
((yourstruct)((ArrayList)firstlist[ix1])[ix2]).SomeProperty vil jeg tro
14. februar 2005 - 20:48
#2
hmm.. jeg compiler fint nok.. men jeg kan ikke få den til at ændre den.. mærkeligt nok /tand
14. februar 2005 - 20:49
#3
Skriver du: ((yourstruct)((ArrayList)firstlist[ix1])[ix2]).SomeProperty = noget; ?
14. februar 2005 - 20:51
#4
ja.. eller rettere ((Verse)( (ArrayList)( (ArrayList)Verses[bookNumber])[chapCnt-1])[verseCnt]).setIndex(etTal); mærkeligt nok kan jeg ikke få lov til at sætte den variabel (property) direkte
14. februar 2005 - 20:53
#5
compile fejl ? runtime fejl ? hvilken ?
14. februar 2005 - 20:54
#6
den kommer med compile fejl der.. The left-hand side of an assignment must be a variable, property or indexer
14. februar 2005 - 21:02
#7
hvis jeg bare laver følgende: Verse vers = new Verse("hejsa",0L,0,"dav","nejnej"); og bagefter bruger vers.index= 100; så virker det fint nok.. skummelt
14. februar 2005 - 21:05
#8
ja - jeg har lidt svært ved at sige noget uden at se noget mere kode
14. februar 2005 - 21:07
#9
hvilken kode vil du se ?
14. februar 2005 - 21:22
#10
Det som er relevant for problemet = korteste kode som kan vis eproblemet
14. februar 2005 - 21:26
#11
hmm. ja.. du kan lige se de linier hvor jeg prøver at ændre index: ArrayList ChapList = (ArrayList)Verses[bookNumber]; foreach( ArrayList VerseList in ChapList) { chapCnt++; string apptext = "\nKapitel "+chapCnt+"\n\n"; rtbMainTextView.AppendText(apptext); index+= apptext.Length; int verseCnt = 0; foreach(Verse verse in VerseList) { // verse.setIndex(index); ((Verse)( (ArrayList)( (ArrayList)Verses[bookNumber])[chapCnt-1])[verseCnt]).setIndex(index); Console.WriteLine(((Verse)( (ArrayList)( (ArrayList)Verses[bookNumber])[chapCnt-1])[verseCnt]).index); apptext = "V"+verse.verseNumber+" "+ verse.text+"\n"; rtbMainTextView.AppendText(apptext); index+= apptext.Length; verseCnt++; } }
14. februar 2005 - 23:55
#12
det skal ikke være ((Verse)( (ArrayList)( (ArrayList)Verses[bookNumber])[chapCnt-1])[verseCnt]).index = index; ??
15. februar 2005 - 07:51
#13
((Verse)( (ArrayList)( (ArrayList)Verses[bookNumber])[chapCnt-1])[verseCnt]).setIndex(index); må vil kunne forkortes ned til: verse[verseCnt].setIndex(index); hvis du erstatter foreach løkkerne med en for løkke !
15. februar 2005 - 11:54
#14
Jeg tror problemmet er det er en struct. hvilket vil sige når han hiver værdien ud er det ikke en reference men en kopi af af struct. Du skal derfor hive din struct ud ændre værdien, og så smide den tilbage i dit array ved at overskrive den gamle værdi. Jeg tror det er der den er gal. Husk klasser er reference typer og structs value types.
15. februar 2005 - 11:56
#15
Og dog han kalde jo en funktion direkte på struct.
15. februar 2005 - 21:49
#16
hmm prøver lige at lave det om til en klasse.. måske det gør en forskel ?
15. februar 2005 - 21:55
#17
Det hjalp faktisk at lave det om til en klasse :D så nu virker skidtet Tak for hjælpen
15. februar 2005 - 23:04
#18
Yes det er fordi i det sekund du kalder en funktion bliver de rlavet en kopi af struct. Vil du bruge structs skal du første hive den ud ændre de ting du vil og så overskrive den gamle. Eller bruge klasser.
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.