Avatar billede nolex32 Nybegynder
24. oktober 2008 - 15:04 Der er 8 kommentarer og
1 løsning

problem med updatering af struct

Hejsa

Jeg har denne struct:

public struct Employee
    {
        Guid                contactid;
        decimal                privatecaruse;

        public Employee(Guid contactid)
        {
            this.contactid          = contactid;
            this.privatecaruse      = 0;
        }

        public Guid Contactid
        {
            get { return contactid; }
            set { this.contactid = value; }
        }
   

        public decimal Privatecaruse
        {
            get { return privatecaruse; }
            set { this.privatecaruse = value; }
        }   
    }

Senere i min kode har jeg en metode som løber en List<AllEmployees> igennem og opdatere hvert enkelt med en værdi:



foreach (Employee e in AllEmployees)
{
  e.Privatecaruse = privatecaruse.Km;
}

Dette giver dog fejlen:  Cannot modify members of 'e' because it is a 'foreach iteration variable'.

Jeg forstår såmen godt hvad der menes med fejlen, men burde jeg ikke kunne opdatere mit Employee struct på denne måde?
Avatar billede erikjacobsen Ekspert
24. oktober 2008 - 15:16 #1
Det kan man vist kun med variabler, der er reference-typer (og ikke value-typer). Hvis du laver det til en klasse, så går det vistnok (utestet).
Avatar billede nolex32 Nybegynder
24. oktober 2008 - 15:24 #2
så er der jo ikke megen mening i at have set metoder på en struct hvis de ikke kan opdateres.
Avatar billede erikjacobsen Ekspert
24. oktober 2008 - 15:31 #3
Jo, så længe du kan acceptere, at det er en value-type.
Avatar billede arne_v Ekspert
24. oktober 2008 - 15:40 #4
Der er en tommelfinger regel i .NET som siger at man skal bruge class til noget som
kan aendres og struct til noget som ikke kan aendres.

Jeg er ikke helt enig i den regel. Men det her er et godt eksempel hvor den giver
mening.

Hvis du kunne aendre de her structs ville du nemlig komme til at aendre i en kopi
af dem og ikke i originalen.
Avatar billede nolex32 Nybegynder
24. oktober 2008 - 15:41 #5
Jeg forstår ikke helt forskellen.
Avatar billede nolex32 Nybegynder
24. oktober 2008 - 15:47 #6
Tror jeg forstår. Gør nu heller ikke den store forskel om jeg laver en List med klasser eller struct. Det sjove er at hvis jeg i min struct har en List så kan jeg godt add() til denne, mens en variabel ikke kan ændres. :-/
Vil i dele lidt points?
Avatar billede arne_v Ekspert
24. oktober 2008 - 17:08 #7
I det tilfaelde aendrer du ikke i structen. Du aendrer i noget som struften har en pointer til.
Avatar billede arne_v Ekspert
24. oktober 2008 - 17:18 #8
Gerne, men jeg synes nu egentligt ikke at jeg har bidraget med meget til dit
spoergsmaal.
Avatar billede erikjacobsen Ekspert
24. oktober 2008 - 17:21 #9
Ingen points til mig, tak.
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