Λοιπόν έχω το εξής "απίστευτο" πρόβλημα. Έχω μια συνάρτηση που δέχεται σαν όρισμα μια λίστα τύπου generic.List(Of T) όπου T είναι μια δική μου κλάση μόνο με properties. Η συνάρτηση θέλω να επιστρέφει μια νέα λίστα την οποία δημιουργεί με βάση το όρισμα. Πιο συγκεκριμένα, η κάθε λίστα αντιπροσωπεύει μια κατάσταση σε ένα παιχνίδι, και η συνάρτηση πρέπει να δέχεται μια κατάσταση και να παράγει μια καινούρια. Το πρόβλημα είναι ότι δεν θέλω να χάνω την παλιά κατάσταση. Η συνάρτησή μου μέσα της δημιουργεί μια νέα λίστα, την γεμίζει (AddRange) με τα στοιχεία του ορίσματος και κάνει πράξεις. Το πρόβλημα είναι ότι όταν "γεμίζω" τη νέα λίστα με τα στοιχεία αυτής που περνάω ByVal στο όρισμα, η VB αντιγράφει μόνο τους δείκτες, με αποτέλεσμα, ΟΤΙ ΑΛΛΑΓΗ ΚΑΝΩ στην τοπική νέα λίστα, περνάει προφανώς στη λίστα πίσω από το όρισμα, και την καταστρέφει. Το θέμα είναι ότι χρειάζομαι ένα τρόπο για να μην πειράζει το όρισμα, δηλαδή θέλω να δημιουργεί νέο ανεξάρτητο αντίγραφο του ορίσματος στη μνήμη. Δηλαδή έχω:
Λίστα1 -> θέλω να μην την πειράξει κανένας, περνάει σαν όρισμα στη συνάρτηση (ας πούμε διεύθυνση 1-100 στη μνήμη)
Λίστα2 -> την δημιουργεί τοπικά η συνάρτηση για να κάνει πράξεις πάνω της και να την επιτρέφει με return Λίστα2 (ας πούμε διεύθυνση 101-200)
Πώς θα γεμίσω την Λίστα2 με στοιχεία ίδια με αυτά της Λίστας1? Δοκίμασα Λιστα2=Λίστα1 και Λίστα2.AddRange(Λίστα1) και Λίστα2=new list(Of T)(Λιστα1) και γεμίζει τις θέσεις 101-200 με δείκτες στις θέσεις 1-100, κάτι που δεν θέλω. ΔΕΝ ΥΠΑΡΧΕΙ ΤΡΟΠΟΣ ΝΑ ΠΕΡΑΣΩ ΠΡΑΓΜΑΤΙΚΟ ΑΝΤΙΓΡΑΦΟ ΤΟΥ ΟΡΙΣΜΑΤΟΣ ΚΑΙ ΟΧΙ ΔΕΙΚΤΗ ΣΕ ΑΥΤΟ?????????????
Οποιαδήποτε βοήθεια είναι ευπρόσδεκτη.
Υ.Γ. Η Λίστα1 γεμίσει με μία procedure. Το να φτιάχνω από την αρχή πολλές ίδιες λίστες και μετά να τις περνάω (σαν δείκτη) στη συνάρτηση, δεν είναι πρακτικό, γιατί όπως έγραψα παραπάνω κάθε λίστα αντιπροσωπεύει μια διάταση-instance ενός παιχνιδιού, οπότε αν το κάνω έτσι θα είναι:
1ο βήμα->Λίστα1
2ο βήμα->function(Λίστα2)
3ο βήμα->function(function(Λίστα3)) κ.ο.κ και οι Λίστα1,Λίστα2,Λίστα3 κλπ φτιάχνονται αρχικά ίδιες
οπότε αν έχω 300 βήματα στο παιχνίδι, θα γίνεται χαμός. ΓΙ ΑΥΤΟ ΑΝΑΖΗΤΩ ΤΡΟΠΟ να φτιάχνω επιτόπου αντίγραφο του ορίσματος και να καλώ
NextStep=function(ThisStep), χωρίς να μου χαλάει το ThisStep