visualrenzo ha scritto:
Anche se memorizzo la lista vecchia iniziale in una nuova lista prima di cancellare, per esempio ListaNuova = ListaInviata mi trovo sempre che
anche la seconda lista ha i valori mancanti come la prima anche al secondo giro
Direi che devi approfondire la
differenza tra Reference Type e Value Type.
La lista dei tuoi numeri è un oggetto che contiene un insieme di interi: se fai quel tipo di assegnazione, stai solo facendo puntare un'altra variabile alla medesima lista, copiandone il riferimento, quindi qualsiasi modifica tu faccia attraverso una qualsiasi di quelle variabili, stai in realtà agendo sempre sulla medesima lista.
Devi
fare un "clone" della lista, ossia generare una nuova lista di numeri da assegnare a una variabile partendo dalla lista di partenza e ottenendo così due diversi riferimenti.
Questo tipo di operazioni le potresti ottenere facilmente usando i
metodi di LINQ.
Ecco un esempio di codice per rendere l'idea:
[CODE]
' Creo una lista dei numeri che vanno da 0 a 100
Dim StartList = Enumerable.Range(0, 100).ToList()
' Applico un filtro e ottengo una lista dei numeri maggiori di 44
Dim ChildList = StartList.Where(Function (Num) Num > 44).ToList()
' Applico un filtro e creo una lista dei numeri pari
Dim EvenList = StartList.Where(Function(Num) Num Mod 2 = 0).ToList()
Il metodo
Where() di LINQ ti consente di specificare una condizione per filtrare gli elementi, ma hai a disposizione anche
OrderBy(), oppure
Skip() o
Take(),
First() o
Last() ecc. per partire dalla tua lista, o da qualsiasi valore "enumerabile", e applicare un filtro, un ordinamento, una proiezione di un dato di diverso tipo, una funzione di aggregazione, ecc.
Nell'esempio sopra ho usato
Where() per riprodurre l'effetto simile al filtro che hai applicato tu, mentre
ToList() permette di estrarre i valori che soddisfano il criterio estraendoli sottoforma di lista, e ovviamente si tratta di
una lista diversa da quella di partenza, che rimane disponibile per ulteriori operazioni.
In breve, più che agire sulla lista di partenza in modo diretto o clonarla per modificarla tenendo l'originale, ti consiglio invece di
generare le liste dei valori che ti servono applicando LINQ per definire i criteri degli elementi che devono essere (o non essere) presenti, come li vuoi ordinati, quanti ne vuoi, ecc.
Il codice ne guadagnerà in leggibilità e semplicità e l'approccio sarà più simile a una programmazione funzionale, con tutti i vantaggi che ne derivano.
Ciao!