Avatar billede mcnovy Nybegynder
13. november 2007 - 15:53 Der er 10 kommentarer og
1 løsning

hvordan gemmer man en arraylist i en class

Hej,

jeg prøver at lave en class som skal gemmes i en arraylist.

den ser nogenlunde ud som følgende

class arrlib
    {

        public arrlib(string Appname, string Pictureposition, string Appposition, ArrayList ArrShortcuts)
        {
            appname = Appname;
            pictureposition = Pictureposition;
            appposition = Appposition;
           
            ArrayList = ArrShortcuts;
        }
        protected string appname;
        public string Appname
        {
            get
            {
                return appname;
            }
        }
        protected string pictureposition;
        public string Pictureposition
        {
            get
            {
                return pictureposition;
            }
        }
        protected string appposition;
        public string Appposition
        {
            get
            {
                return appposition;
            }
        }
        protected ArrayList arrShortcuts;
        public ArrayList ArrShortcuts
        {
            get
            {
                return arrShortcuts;
            }
        }
    }

hvis jeg kører følgende
               
arrlib arr = new arrlib(Appname, picpos, appPosition, arrshortcut);
               
_arr.Add(arr);


problemet er at den vidst kun laver en pointer til mit array.

jeg har også prøvet med .add() men når jeg så prøver at hente arraylisten, så siger den at objektet er null.

er der nogen der kan fortælle mig hvordan man gør dette..?

på forhånd tak
Avatar billede nielle Nybegynder
13. november 2007 - 17:00 #1
Jeg ville nu vælge at gemme det i en List<arrlib> i stedet for en ArrayList.
Avatar billede nielle Nybegynder
13. november 2007 - 17:14 #2
Bortset fra at der er en fejl i klassen constructor så burde det fungere:

            string Appname = ".A.";
            string picpos = ".B.";
            string appPosition = ".C.";

            ArrayList arrshortcut = new ArrayList();
            arrshortcut.Add(".D.");
            arrshortcut.Add(".E.");

            arrlib arr = new arrlib(Appname, picpos, appPosition, arrshortcut);

            ArrayList _arr = new ArrayList();
            _arr.Add(arr);

            arrlib arr2 = (arrlib)_arr[0];
            Console.WriteLine("{0} {1} {2} {3}", arr2.Appname, arr2.Pictureposition, arr2.Appposition, arr2.ArrShortcuts.Count);
Avatar billede mcnovy Nybegynder
13. november 2007 - 17:14 #3
kan du lige give en lidt længere forklaring..?
Avatar billede nielle Nybegynder
13. november 2007 - 17:23 #4
Jeg går ud fra at det er 13/11-2007 17:00:18 du hentyder til (ellers har du da læst hurtig)...

ArrayList kan tage alle mulige typer af objekter, men det kommer med en del problemer i form af mindre sikkerhed imod runtime fejl eller performance. Du bliver også nødt til at typecase og den slags.

En List<arrlib> kan kun tage objekter af typen arrlib (eller klasser der arber fra denne). Til gengæld er den hurtiger og mere sikker at arbejde med. Nogen stedet bliver koden endda nemmere at læse - andre steder værre (om end det jo er et spørgsmål om smag).

Med en List<> ville koden fra 13/11-2007 17:14:30 se sådan her ud:

            string Appname = ".A.";
            string picpos = ".B.";
            string appPosition = ".C.";

            ArrayList arrshortcut = new ArrayList();
            arrshortcut.Add(".D.");
            arrshortcut.Add(".E.");

            arrlib arr = new arrlib(Appname, picpos, appPosition, arrshortcut);

            // ArrayList _arr = new ArrayList();
            List<arrlib> _arr = new List<arrlib>();           
            _arr.Add(arr);

            // arrlib arr2 = (arrlib)_arr[0];
            arrlib arr2 = _arr[0];
            Console.WriteLine("{0} {1} {2} {3}", arr2.Appname, arr2.Pictureposition, arr2.Appposition, arr2.ArrShortcuts.Count);

I samme omgang burde arrshortcut så også laves om til en List<???>.
Avatar billede mcnovy Nybegynder
13. november 2007 - 17:33 #5
kan være at jeg ikke har været præcis nok,
eller jeg ikke forstår dig korrekt.

men hvis vi tager din kode som udgangspunkt, og tilføjer arrshortcut.Clear();
så fjerner den indholdet i arrshortcut.
dvs, at den vidst bare fungere som en pointer..
ja.. fejlen må ligge i constructoren (udover min tastefejl)
men hvordan gør man det lige så den gemmer det..?
            string Appname = ".A.";
            string picpos = ".B.";
            string appPosition = ".C.";

            ArrayList arrshortcut = new ArrayList();
            arrshortcut.Add(".D.");
            arrshortcut.Add(".E.");

            arrlib arr = new arrlib(Appname, picpos, appPosition, arrshortcut);

            ArrayList _arr = new ArrayList();
            _arr.Add(arr);

            arrlib arr2 = (arrlib)_arr[0];
            arrshortcut.Clear();  //
            Console.WriteLine("{0} {1} {2} {3}", arr2.Appname, arr2.Pictureposition, arr2.Appposition, arr2.ArrShortcuts.Count);
Avatar billede nielle Nybegynder
13. november 2007 - 17:42 #6
Sådan fungere klasser helt generelt - det er ikke noget specielt for ArrayList.

Hvis du ønsker at genbruge variablen arrshortcut til en ny instans, så skal der kaldes endnu en new():

            string Appname = ".A.";
            string picpos = ".B.";
            string appPosition = ".C.";

            ArrayList arrshortcut = new ArrayList();
            arrshortcut.Add(".D.");
            arrshortcut.Add(".E.");

            arrlib arr = new arrlib(Appname, picpos, appPosition, arrshortcut);

            ArrayList _arr = new ArrayList();
            _arr.Add(arr);

            arrshortcut = new ArrayList();
            arrshortcut.Add(".F.");
            arrshortcut.Add(".G.");
            arrshortcut.Clear();

            arrlib arr2 = (arrlib)_arr[0];
            Console.WriteLine("{0} {1} {2} {3}", arr2.Appname, arr2.Pictureposition, arr2.Appposition, arr2.ArrShortcuts.Count);
Avatar billede mcnovy Nybegynder
13. november 2007 - 17:52 #7
så det var et lille simpelt "new" jeg ledte efter..

superlækkert..!
smid et svar.

jeg giver dig 100 istedet for 60,
for list<> tingen er guld værd, den kunne jeg godt have brugt lidt før :)

og jeg takker for hjælpen
Avatar billede nielle Nybegynder
13. november 2007 - 17:57 #8
Takker :^)

Som sagt synes jeg også at du skal indføre en List<???> på din arrshortcut. Jeg kan dog ikke lige gætte hvilken type der skal i stedet for ???. Hvad putter ud i sådan en liste?
Avatar billede mcnovy Nybegynder
13. november 2007 - 18:09 #9
typen er endnu en class
så list<> kan vidst ikke være bedre, da jeg synes at ArrayList er lidt besværlig til tider at arbejde med når det er klasser der er med at gøre..
Avatar billede nielle Nybegynder
13. november 2007 - 18:19 #10
Skal det forstås som at du allered har erstattet den "indre" ArryList med en passende List<???> ?

List<???> og dens søskende kaldes under ét for Generics og de er blevet indført fra og med .Net 2.0.

Der findes stort set en generic-type for hver af de "gamle" klasser i System.Collections namespacet.
Avatar billede mcnovy Nybegynder
13. november 2007 - 18:57 #11
Nej, ikke endnu,
men jeg prøvede lige at lave et hurtigt lille eksempel på list<>
og som jeg lige oplevede det i min lille test,
så passede det meget bedre til det jeg skal bruge det til, en arraylist.
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
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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