deep copy af Arraylist

Tags:    c#

Hej Allesammen

Et af de ofte stillede spørgsmål kan jeg konstatere, men har endnu ikke fundet et brugbart svar:

Jeg har en arraylist med brugdefinerede typer, som jeg har brug for at kunne kopiere i en deep copy. Kan se at alle de implementerede funktioner hertil ikke kan gøre jobbet. Man er vel derfor nødt til at skrive en funktion selv???

Er der en der kan vise mig i detaljer præcis hvordan??

På forhånd tak.



5 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
Skal man ikke implementere ICloneable interfacet? i hvert objekt der skal clones?


Jo det vil nok være den nemmeste måde.

Implementer ICloneable-interfacet i alle de objekter som du har i din arraylist. Og lav en funktion der kan lave en ny arraylist og kalde Clone på alle objekterne i arraylisten.

Søgte lige på google og fandt dette:
http://www.devx.com/vb2themax/Tip/18708

Her bruger han .NETs serialize funktioner til først at serializere et objekt og derefter deserializere det. På denne måde kan han lave clone alle objekt typer.


Hilsen

Martin Dybdal (Dybber)
Blog: http://dybber.dk/blog/



Hej Allesammen

Et af de ofte stillede spørgsmål kan jeg konstatere, men har endnu ikke fundet et brugbart svar:

Jeg har en arraylist med brugdefinerede typer, som jeg har brug for at kunne kopiere i en deep copy. Kan se at alle de implementerede funktioner hertil ikke kan gøre jobbet. Man er vel derfor nødt til at skrive en funktion selv???

Er der en der kan vise mig i detaljer præcis hvordan??

På forhånd tak.


Du skal vel lave et ny objekt af samme type og kopierer alle variabler over i det nye objekt som ikke er primitive. De primitive klarer kompileren selv. Ved ikke lige hvordan man gør det i C#, om man kan lave en overloade =-tegnet, eller om man kan overloade constructoren?! Ellers er der nok en clone() funktion som du skal bruge på en eller anden smart måde.

Slot - All your base are belong to us
http://www.sigsys.dk




Du skal vel lave et ny objekt af samme type og kopierer alle variabler over i det nye objekt som ikke er primitive. De primitive klarer kompileren selv. Ved ikke lige hvordan man gør det i C#, om man kan lave en overloade =-tegnet, eller om man kan overloade constructoren?! Ellers er der nok en clone() funktion som du skal bruge på en eller anden smart måde.

Slot - All your base are belong to us
http://www.sigsys.dk

Ja præcis, det er noget i den stil. Men så vidt jeg kan se er alle clone funktioner kun af typen "shallow " og dermed copieres kun referencen. Tilsvarende hvis man bruger "=". Så jeg er på jagt efter en eller anden funktion man selv kan skrive der kan gøre det for en. I microsofts dokumentation ser det ud til at man selv skal lave en Clonefunktion, der kan tage sig af de mere komplicerede typer, men hvordan....




Du skal vel lave et ny objekt af samme type og kopierer alle variabler over i det nye objekt som ikke er primitive. De primitive klarer kompileren selv. Ved ikke lige hvordan man gør det i C#, om man kan lave en overloade =-tegnet, eller om man kan overloade constructoren?! Ellers er der nok en clone() funktion som du skal bruge på en eller anden smart måde.

Slot - All your base are belong to us
http://www.sigsys.dk


Ja præcis, det er noget i den stil. Men så vidt jeg kan se er alle clone funktioner kun af typen "shallow " og dermed copieres kun referencen. Tilsvarende hvis man bruger "=". Så jeg er på jagt efter en eller anden funktion man selv kan skrive der kan gøre det for en. I microsofts dokumentation ser det ud til at man selv skal lave en Clonefunktion, der kan tage sig af de mere komplicerede typer, men hvordan....

altså jeg ved kun hvordan du gør i C++ og Java :) Faktisk ikke så svært, og jeg vil vædde med at det heller ikke er svært i C#

Slot - All your base are belong to us
http://www.sigsys.dk



Skal man ikke implementere ICloneable interfacet? i hvert objekt der skal clones?



t