Mai dare per scontate le cose più scontate...

Con riferimento al post precedente, uno degli errori che avevo commessoè semplicemente di comprensione:

Come "tradurreste" un codice Java di questo tipo:


Iterator i = lista.iterator();
while (i.hasNext() && condizione)  
{
 
// Aggiungi ad una seconda lista
}

Beh, io avevo semplicemente fatto così:

IEnumerator i = lista.GetEnumerator();
while (i.MoveNext() && condizione)
{
 
// Aggiungi ad una seconda lista
}

senza nemmeno starci troppo a pensare...

Se invece avessi fatto in questo modo:

IEnumerator i = lista.GetEnumerator();
while (condizione < sliceCapacity && i.MoveNext())
{
 
// Aggiungi ad una seconda lista
}

avrei risparmiato mezza giornata abbondante a capire perchè perdevo regolarmente determinati elementi della mia lista...
:(((((

La cosa è ovviamente logica e giusta:

Iterator in java ha un metodo hasNext(), il quale valuta se ci sono elementi disponibili nella lista, mentre il metodo next() compie effettivamente lo spostamento sull'oggetto che viene preso dalla lista e ritornato all'utente.

IEnumerator del .NET ha un metodo MoveNext() il quale per prima cosa si sposta, e quindi ritorna true se si è spostato su un'oggetto della lista o false se ne è uscito fuori (sto spiegando in soldoni... del resto la cosa è veramente scontata!).

Quindi nel mio ciclo while perdevo regolarmente un elemento quando condizione == false, visto che in prativa veniva richiamato MoveNext() 2 volte di fila... 
 

powered by IMHO 1.2