Avatar billede paultodobom Nybegynder
16. marts 2007 - 08:09 Der er 10 kommentarer og
1 løsning

IEnumerable og klasse med generic dictionary

I uddrag har jeg følgende kode:

using System.Collections.Generic;
public class Aktiviteter
{
    private Dictionary aktiviteter<string, Aktivitet> aktiviteter;

    public Aktiviteter()
    {
        aktiviteter = new Dictionary<string, Aktivitet>();
    }
}

public class Aktivitet
{
    private string navn;
    public string Navn
    {
        get { return navn; }
        set { navn = value; }
    }
}

Jeg vil gerne kunne loop'e klassen Aktiviteter's dictionary af aktiviteter med en foreach. Selve loop'et foregår et andet sted end inde i selve klassen. Jeg har en fornemmelse af, at jeg skal implementere IEnumerable på class Aktiviteter i stil med public class Aktiviteter : IEnumerable<Dictionary<string, Aktivitet>>.

Kan du hjælpe?
Avatar billede paultodobom Nybegynder
16. marts 2007 - 08:10 #1
Jeg var vist lidt fedtet med point'ene. Jeg sætter gerne 30 mere på højkant. :)
Avatar billede kalp Novice
16. marts 2007 - 09:47 #2
øhm.. du kan da godt løbe den igennem...

    Dictionary<string, string> s = new Dictionary<string, string>();
        foreach (string key in s.Keys)
        {
            Console.WriteLine(s[key].ToString());
        }
Avatar billede kalp Novice
16. marts 2007 - 09:49 #3
den her vil virke med din.


        foreach (string key in aktiviteter.Keys)
        {
            Console.WriteLine(aktiviteter[key].Navn);
        }
Avatar billede paultodobom Nybegynder
16. marts 2007 - 13:16 #4
Din løsning virker hvis jeg skal gennemløbe aktiviteter inde i klassen Aktiviteter og har direkte adgang til den private "aktiviteter". Jeg vil imidlertid have adgang til "aktiviteter" udefra. Jeg er i tvivl om public class Aktiviteter skal implementere IEnumerable (public class Aktiviteter : IEnumerable) og eventuelt hvordan den skal implementeres.
Avatar billede kalp Novice
16. marts 2007 - 13:21 #5
public class Aktiviteter
{
    private Dictionary aktiviteter<string, Aktivitet> aktiviteter;

    public Aktiviteter()
    {
        aktiviteter = new Dictionary<string, Aktivitet>();
    }

  public Dictionary aktiviteter<string, Aktivitet> Aktiviteter
  {
    get { return aktiviteter; }
  }
}


sådan ville jeg løse den.
Avatar billede paultodobom Nybegynder
16. marts 2007 - 13:21 #6
Jeg har selv fundet en løsning. Jeg har tilføjet klassen Aktiviteter en property som følger:

        public Dictionary<string, Aktivitet> AlleAktiviteter
        {
            get { return aktiviteter; }
        }
Avatar billede paultodobom Nybegynder
16. marts 2007 - 13:23 #7
Ups, der kom vi vist nogenlunde samtidig med en løsning. Jeg havde ellers lige opdateret inden jeg skrev min kommentar. Jeg vil ikke snyde dig for point'ene, så smid lige et svar.
Avatar billede kalp Novice
16. marts 2007 - 13:35 #8
det i orden:)
Avatar billede paultodobom Nybegynder
16. marts 2007 - 13:38 #9
Jeg fandt forøvrigt løsningen på http://www.thescripts.com/forum/thread505467.html
Avatar billede paultodobom Nybegynder
16. marts 2007 - 13:39 #10
Udenfor klassen har jeg imidlertid stadig det problem, at jeg gerne vil kunne løbe dictionary'et igennem med en foreach (Aktivitet a in aktiviteter.AlleAktiviteter). Kan det lade sig gøre?
Avatar billede kalp Novice
16. marts 2007 - 13:48 #11
foreach (Aktivitet a in ditObjekt.AlleAktiviteter.Keys)
        {
            Console.WriteLine(aktiviteter[a].Navn);
        }

så ja.. hent normalt kan det gøres. ditObjekt er din Aktiviter klasse i det eksempel jeg kan se. men pænest er jo at lave en reference af typen Dictionary aktiviteter<string, Aktivitet> og løbe den igenne.

Dictionary aktiviteter<string, Aktivitet> aktiviteterTmp = ditObjekt.AlleAktiviteter;

og så løbe aktiviterTmp igennem.
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