Devo leggere le righe da un file di testo in ordine sequenziale. Il file è un formato di testo personalizzato che contiene sezioni. Se alcune sezioni sono fuori servizio, vorrei cercare l'avvio della prossima sezione valida e continuare l'elaborazione.
Attualmente ho un codice simile a questo:
for (int currentLineIndex=0; currentLineIndex < lines.Count; currentLineIndex++ )
{
//Process section here
if( out_of_order_condition )
{
currentLineIndex--;//Stay on the same line in the next iteration because this line may be the start of a valid section.
continue;
}
}
Questo codice è olfattivo?
AGGIORNAMENTO: non l'ho menzionato prima, ma la causa principale di questo tipo di codice era una complicata commutazione (tipica durante l'analisi).
Mi sono liberato della variabile di incremento / decremento usando la frase "goto case".
La struttura ora appare così:
switch(state)
{
case State.BOF:
{
//Process BOF case
}
case State.SeenHeader:
{
if( out_of_order_condition )
{
state = State.BOF; //Reset the state to some respectable one
//currentLineIndex--; Removed
//continue; Removed
goto case State.BOF;//Handle this in this iteration itself.
}
}
}