Avatar billede tandpine Nybegynder
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
Avatar billede arne_v Ekspert
14. februar 2005 - 20:21 #1
((yourstruct)((ArrayList)firstlist[ix1])[ix2]).SomeProperty

vil jeg tro
Avatar billede tandpine Nybegynder
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
Avatar billede arne_v Ekspert
14. februar 2005 - 20:49 #3
Skriver du:

((yourstruct)((ArrayList)firstlist[ix1])[ix2]).SomeProperty = noget;

?
Avatar billede tandpine Nybegynder
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
Avatar billede arne_v Ekspert
14. februar 2005 - 20:53 #5
compile fejl ? runtime fejl ? hvilken ?
Avatar billede tandpine Nybegynder
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
Avatar billede tandpine Nybegynder
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
Avatar billede arne_v Ekspert
14. februar 2005 - 21:05 #8
ja - jeg har lidt svært ved at sige noget uden at se noget mere kode
Avatar billede tandpine Nybegynder
14. februar 2005 - 21:07 #9
hvilken kode vil du se ?
Avatar billede arne_v Ekspert
14. februar 2005 - 21:22 #10
Det som er relevant for problemet = korteste kode som kan vis eproblemet
Avatar billede tandpine Nybegynder
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++;
            }
        }
Avatar billede burningice Nybegynder
14. februar 2005 - 23:55 #12
det skal ikke være

((Verse)( (ArrayList)( (ArrayList)Verses[bookNumber])[chapCnt-1])[verseCnt]).index = index;

??
Avatar billede arne_v Ekspert
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 !
Avatar billede segato Nybegynder
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.
Avatar billede segato Nybegynder
15. februar 2005 - 11:56 #15
Og dog han kalde jo en funktion direkte på struct.
Avatar billede tandpine Nybegynder
15. februar 2005 - 21:49 #16
hmm prøver lige at lave det om til en klasse.. måske det gør en forskel ?
Avatar billede tandpine Nybegynder
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
Avatar billede segato Nybegynder
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.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester