Meer
Hoe kloon ik een generieke lijst in C#?
Ik heb een generieke lijst van objecten in C#, en ik wil de lijst klonen. De items in de lijst zijn kloonbaar, maar er lijkt geen optie te zijn om list.Clone()
te doen.
Is er een makkelijke manier om dit te omzeilen?
541
3
Als je elementen waarde types zijn, dan kun je gewoon doen:
Als het echter referentietypes zijn en je wilt een diepe kopie (ervan uitgaande dat je elementen
ICloneable
goed implementeren), dan zou je iets als dit kunnen doen:Vervang uiteraard
ICloneable
in de bovenstaande generics en cast met wat voor elementtype dan ook datICloneable
implementeert.Als je element type
ICloneable
niet ondersteunt, maar wel een copy-constructor heeft, zou je dit in plaats daarvan kunnen doen:Persoonlijk zou ik
ICloneable
vermijden vanwege de noodzaak om een diepe kopie van alle leden te garanderen. In plaats daarvan zou ik de copy-constructor voorstellen of een factory method zoalsYourType.CopyFrom(YourType itemToCopy)
die een nieuwe instantie vanYourType
teruggeeft.Elk van deze opties kan door een methode (extensie of anderszins) worden omhuld.
Voor een ondiepe kopie kunt u in plaats daarvan de methode GetRange van de generieke klasse List gebruiken.
Geciteerd uit: Generics Recipes
Als je alleen om waardetypes geeft...
En je kent het type:
Als je het type niet van tevoren weet, heb je een helperfunctie nodig:
De gewoon: