Avatar billede micker Praktikant
23. april 2013 - 20:28 Der er 4 kommentarer og
1 løsning

Arraylist med nedarvede objekter

Hejsa

Jeg har til en skoleopgave lavet nogle classer med nedarvning til nogle andre classer.

Opgaven er en brugerdatabase, hvor hver type af brugere har deres egen klasse med nedarvning fra den generelle bruger klasse.
Dvs. de oplysninger er er unikke for den enkelte bruger er gemt i den nedarvede klasse og de generelle i bruger klassen.

Disse oplysninger skal gemmes i en fil, og her bruger jeg en arraylist til at holde de forskellige objekter i.

Jeg skal have en generel metode i min brugerklasse til at finde en bruger med. Jeg har noget der virker, men det virker lidt omstændigt. Kan nogen hjælpe mig med at simplificere den lidt, så jeg måske opstår en større forståelse for dette.

Koden er således. Der sendes er brugernavn, og detajler fremfindes og returneres i det rette objekt.
Mit problem er, at jeg først opretter en instans af Bruger objektet for så at finde ud af hvad det rette objekt er, før det returneres.


public class Bruger
{
    public string Email;
    public string KodeOrd;
    public bool NyhedsBrev;
    public string BrugerType;
    public string ForNavn;
    public string EfterNavn;
   
    ArrayList al = new ArrayList();

public Bruger FindDetaljer(string BrugerNavn)
    {
        al = FileController.ReadFile(@"c:\temp\Bruger.bin");
        Bruger svar = new Bruger();
        foreach (Bruger b in al)
        {
            if (b.Email == BrugerNavn)
            {
                if (b is LandMand)
                { return svar = b as LandMand; }
                if (b is Fisker)
                { return svar = b as Fisker; }
                if (b is Editorer)
                { return svar = b as Editorer; }
                if (b is Administratorer)
                { return svar = b as Administratorer; }
            }
        }

        return svar;
    }

}
Avatar billede arne_v Ekspert
23. april 2013 - 20:42 #1
public Bruger FindDetaljer(string BrugerNavn)
    {
        al = FileController.ReadFile(@"c:\temp\Bruger.bin");
        foreach (Bruger b in al)
        {
            if (b.Email == BrugerNavn)
            {
                return b;
            }
        }
        return null;
    }
Avatar billede arne_v Ekspert
23. april 2013 - 20:43 #2
Andet:
1) List<> er bedre end ArrayList
2) metoden boer nok vaere static
3) med List<> kan du lave det endnu simplere med LINQ
Avatar billede arne_v Ekspert
23. april 2013 - 20:44 #3
public Bruger FindDetaljer(string BrugerNavn)
    {
        return FileController.ReadFile(@"c:\temp\Bruger.bin").FirstOrDefault(b => b.Email == BrugerNavn);
    }

utestet!!
Avatar billede micker Praktikant
24. april 2013 - 16:07 #4
Super.. Lægger du lige et svar?
Avatar billede arne_v Ekspert
24. april 2013 - 16:13 #5
svar
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