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