Viac na
Ako klonovať všeobecný zoznam v jazyku C#?
Mám všeobecný zoznam objektov v jazyku C# a chcem ho klonovať. Položky v zozname sa dajú klonovať, ale zdá sa, že neexistuje možnosť vykonať list.Clone()
.
Existuje nejaký jednoduchý spôsob, ako to obísť?
541
3
Ak sú vaše prvky hodnotové typy, môžete jednoducho urobiť:
Ak sú to však referenčné typy a vy chcete hĺbkovú kópiu (za predpokladu, že vaše prvky správne implementujú
ICloneable
), môžete urobiť niečo takéto:Samozrejme, vo vyššie uvedených generikách nahraďte
ICloneable
a použite akýkoľvek typ vášho prvku, ktorý implementujeICloneable
.Ak váš typ prvku nepodporuje
ICloneable
, ale má kopírovací konštruktor, môžete namiesto toho urobiť toto:Osobne by som sa vyhol
ICloneable
kvôli potrebe zaručiť hlboké kopírovanie všetkých členov. Namiesto toho by som navrhoval kopírovací konštruktor alebo továrenskú metódu akoYourType.CopyFrom(YourType itemToCopy)
, ktorá vráti novú inštanciuYourType
.Ktorákoľvek z týchto možností by mohla byť obalená metódou (rozšírením alebo inak).
Pre plytké kopírovanie môžete namiesto toho použiť metódu GetRange generickej triedy List.
Citované z: Generics Recipes
Ak vás zaujímajú len hodnotové typy...
A poznáte typ:
Ak typ nepoznáte, budete potrebovať pomocnú funkciu:
Práve: