Avatar billede entracore Nybegynder
03. december 2002 - 20:54 Der er 28 kommentarer og
2 løsninger

Foreach in

Hey

Jeg har en klasse hvor jeg angiver et array. Det jeg gerne vil er så at hente arrayet ind i en anden klasse og udskrive denne. Hvordan gøres dette.

Et sourcecode eksempel.

//Klassen der skaber arrayet.
public class CreateArray
{
    public CreateArray()
    {
        IList myArray = new ArrayList();

        //Her er kommer noget db forbindelse og forspørgsel

        while(gObjRec.Read())
        {
            myArray.Add(gObjRec("TABLE_RECORD"));
        }
    }

    Public IList returnMyArray()
    {
        return myArray;
    }
}

//Klassen der meget gerne skulle kalde arrayet og udskrive denne
public class GetArray
{
//Og hvad pokker skal jeg så gøre ????????
}
Avatar billede burningice Nybegynder
03. december 2002 - 21:01 #1
//Klassen der meget gerne skulle kalde arrayet og udskrive denne
public class GetArray
{
public GetArray() {

CreateArray myObj = new CreateArray()

ArrayList myArr = myArr.returnMyArray();

}

}
Avatar billede burningice Nybegynder
03. december 2002 - 21:02 #2
hvorfor du har valgt at lave en klasse til hver ting, forstår jeg dog ikke... lav dog en klasse til alt der har med det array at gøre... og den kan du så bruge på f.eks. din asp.net side !
Avatar billede simon.ulsnes Nybegynder
03. december 2002 - 21:03 #3
public class GetArray
{
  private CreateArray ca = null;

  public GetArray(CreateArray _ca)
  {
    ca = _ca;
  }

  public IList ReturnArray()
  {
      return (IList)ca;
  }
}

Men jeg må indrømme at jeg ikke kan se hvorfor du vil gøre de på den måde... hvad er det du vil frem til?

// Simon
Avatar billede simon.ulsnes Nybegynder
03. december 2002 - 21:04 #4
Hehe, det er da meget sjovt... vi har sagt stort set det samme...

cyberfessor >> Jeg går ud fra at du mener myObj.returnMyArray() i stedet for myArr.returnMyArray()...

// Simon
Avatar billede burningice Nybegynder
03. december 2002 - 21:09 #5
simon.ulsnes>> det har du ret i.. det kom sig af at jeg havde kaldet myObj for myArr til at starte med, hvilket ikke gav mening, så derfor ændrede jeg det.

men du har ret... jeg er ved at lære det ;)
Avatar billede entracore Nybegynder
03. december 2002 - 21:10 #6
cyberfessor >> Jeg glemte at spørge hvordan man løber arrayet igennem og udskriver de enkelte poster - hvordan gøres dette ?

Grunden til at jeg gøre det på den måde er fordi GetArray er et objekt der indholder en databaseforspørgsel også når jeg har brug for denne forspørgsel kan bare kalde den ved hjælp af f.eks. GetArray
Avatar billede burningice Nybegynder
03. december 2002 - 21:17 #7
entracore>> det er selvfølgelig rigtigt.. men hvorfor koger du ikke dine to klasser sammen til een? som jeg ser det nu

klasse der laver array -> klasse der henter array fra den forgående klasse -> din side der skal bruge arrayet

hvorfor ikke bare hoppe det midterste led over?

klasse der laver array > din side der skal bruge arrayet


ang din løkke skal du først oprette en reader, ud fra dit commandobject (du ved... den der executede din sqlquery)

        while(gObjRec.Read())
        {
            myArray.Add(gObjRec["dit_felt");
        }
Avatar billede entracore Nybegynder
03. december 2002 - 21:22 #8
cyberfessor >> Hvorfor skal jeg oprette en reader ? Det gjorde jeg da i min CreateArray hvor jeg løb alle mine records igennem og tilføjede dem til mit array.

Er det ikke bare nok at løbe arrayet igennem i min GetArray klasse ?
Avatar billede burningice Nybegynder
03. december 2002 - 21:28 #9
ja, ok... jeg misforstod dit spm...

i CreateArray skal du gøre noget i retningen af det her


ArrayList myArr = myArr.returnMyArray();
for (int i; i>myArr.Length(); i++) {
  return myArr[1];
}
Avatar billede entracore Nybegynder
03. december 2002 - 21:34 #10
Jeg får en fejl der siger: "System.Collections.Arraylist does not contain a definition for returnMyArray"
Avatar billede simon.ulsnes Nybegynder
03. december 2002 - 21:37 #11
cyberfessor >> Hehe, du gjorde det igen... :-)
Avatar billede simon.ulsnes Nybegynder
03. december 2002 - 21:37 #12
myArr.returnMyArray() skal erstattes med myObj.returnMyArray(), hvor myObj er hvad du kalder dit CreateArray-objekt.
Avatar billede burningice Nybegynder
03. december 2002 - 21:38 #13
bla... jeg lavede samme fejl igen.. det er

ArrayList myArr = myObj.returnMyArray();

hvor myObj er den reference du lavede til din klasse
Avatar billede simon.ulsnes Nybegynder
03. december 2002 - 21:38 #14
Der skal i øvrigt heller ikke være () efter Length...
Avatar billede entracore Nybegynder
03. december 2002 - 21:43 #15
Jeg sgu ike så hård til det her - men myObj hvad er det lige nøjagtig i forhold til min CreateArray klasse ?? ;-)
Avatar billede simon.ulsnes Nybegynder
03. december 2002 - 21:47 #16
myObj er en instans af din CreateArray-klasse.
Avatar billede burningice Nybegynder
03. december 2002 - 21:47 #17
det er en reference til det object du har oprettet på bagrund af din klasse... ved at bruge myObj. kan du få fat i de public rutiner og funktioner der findes i din CreateArray klasse
Avatar billede entracore Nybegynder
03. december 2002 - 21:52 #18
Hmmm - jeg får nu en fejl som er: "The type or namespace name 'myObj' could not be found (are you missing a using directive or an assembly reference?)
"
Avatar billede simon.ulsnes Nybegynder
03. december 2002 - 21:54 #19
Kom med koden... du skal deklarere myObj som en CreateArray-klasse.

Hvis du vil høre min ærlige mening, tror jeg det er en helt forkert tilgang du har valgt til dit problem. Det kan løses meget nemmere (og dermed mere effektivt).

// Simon
Avatar billede entracore Nybegynder
03. december 2002 - 21:58 #20
Ok - her kommer koden


public class CreateArray
{
    public CreateArray()
    {
        IList myArray = new ArrayList();

        //Her er kommer noget db forbindelse og forspørgsel

        while(gObjRec.Read())
        {
            myArray.Add(gObjRec("TABLE_RECORD"));
        }
    }

    Public IList returnMyArray()
    {
        return myArray;
    }
}


public class GetArray
{
    public GetArray()
    {
        ArrayList myArr = myObj.returnMyArray();
        for (int i; i>myArr.Length; i++) {
            return myArr[1];
        }
    }
}
Avatar billede simon.ulsnes Nybegynder
03. december 2002 - 22:20 #21
I din GetArray-klasse, før constructoren:

CreateArray myObj = new CreateArray();

Men det er altså en virkelig usmart måde at gøre det på...

// Simon
Avatar billede entracore Nybegynder
03. december 2002 - 22:29 #22
Så får jeg en fejl der siger "Cannot implicitly convert type 'System.Collections.IList' to 'System.Collections.ArrayList'
"

Hvorfor er det en usmart måde at gøre det på ??? Jeg skaber et DB objekt jeg kan kalde i hvilken somhelst sammenhæng.
Avatar billede entracore Nybegynder
03. december 2002 - 22:40 #23
DOH Det ovenstående vedr. IList har jeg løst. Jeg får nu en fejl der siger: "System.Collections.ArrayList' does not contain a definition for 'Length'" (myArr.Length)
Avatar billede burningice Nybegynder
03. december 2002 - 22:52 #24
... lad mig gætte... du bruger ikke vs.net til at skrive din kode i?
Avatar billede burningice Nybegynder
03. december 2002 - 22:55 #25
prøv at brug Count istedet for length
Avatar billede simon.ulsnes Nybegynder
03. december 2002 - 22:55 #26
Brug Count i stedet for Length.

Grunden til at din løsning er dårlig, er at du tænker helt forkert på begrebet klasser. Det er muligt det fungerer, men i så fald er det, som man siger, sub-optimalt. Der er for det første absolut ingen grund til at have to klasser. Der er heller ingen grund til at de skal kommunikere på den måde de gør. Der kommer en masse ekstra overhead (unødvendige kald).

// Simon
Avatar billede entracore Nybegynder
04. december 2002 - 12:34 #27
simon.ulsnes >> Count var den property der skulle anvendes - nu virker det :-)

Med hensyn til at du mener at det er en dårlig løsning vil jeg ikke give dig helt ret. Min Create klasse er et DB objekt der indeholder en række udtræk. Get klassen er en Server Control der kaldes fra aspx siden. Så et eller andet sted synes jeg det hænger godt sammen ;-)

Tak for hjælpen.

cyberfessor >> Vil du ikke komme med et svar så du også kan få en bid af kagen.
Avatar billede burningice Nybegynder
04. december 2002 - 13:12 #28
entracore>> tjaa... jeg kender selvfølgelig ikke dit projekt til fulde, og kan derfor ikke udtale mig om, om det er en god løsning eller ej, men jeg må da give simon ret i, at det umiddelbart ser lidt kluntet ud.. men, det var det svar vi kom fra ;)
Avatar billede burningice Nybegynder
04. december 2002 - 13:12 #29
:)
Avatar billede simon.ulsnes Nybegynder
04. december 2002 - 13:56 #30
Men kunne du ikke lige så godt lave det hele i din Get-klasse, altså i Server-kontrollen?
cyberfessor har i øvrigt ret i, at jeg selvfølgelig ikke kender dit projekt til fulde og derfor egentlig ikke kan udtale mig, men...

// Simon
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