Oppure

Loading
23/07/11 8:37
HeDo
Postato originariamente da Qwertj:

In effetti hai ragione HeDo, mi ero scordato che gli oggetti reference sono passati per referenza 8-| Chiedo umilmente perdono :hail:
Però come risolvo? Che sono gli oggetti mutabili/immutabili?
Avevo provato anche a fare una cosa così:
Dim Copy As List(Of String) = List1.Take(List1.Count).ToList

Anche una cosa del genere passa a Copy una referenza di List1?


il modo migliore per fare una cosa del genere se vuoi impedire che si modifichi la lista ma NON ti serve effettivamente una lista ma solo un array: passa un IEnumerable<T> (con T il tipo della lista). In questo modo la funzione si vedrà arrivare un insieme enumerabile senza avere la possibilità di moficarla.

Se invece ti serve passare una lista che la funzione può modificare ma senza che i cambiamenti si riflettano sulla lista del chiamante, l'unico modo è istanziarne una nuova:


void foo(List<int> lst) {

    ....
    lst.Add(1);
    ...
}

List<int> callerList = new List<int>();

// Chiami la funzione istanziando una nuova lista
foo(new List<int>(callerList));



ricordati però che un approccio di questo genere genera una shallow copy, non una copia profonda dell'oggetto. Il risultato è che se la lista è una lista di oggetti mutabili e il chiamato modifica uno di questi oggetti, i cambiamenti si ripercuoteranno sul chiamante. Il motivo è che in una lista di oggetti si memorizzano i reference agli oggetti :)
aaa
23/07/11 9:07
Qwertj
Ok passando la nuova lista funziona perfettamente :) grazie
aaa