Sto cercando di migliorare questo parser di documenti e c'è un ciclo principale che va su tutti gli elementi principali (chiamiamoli Node s). Ogni passaggio ( Step ) può essere Consume o Ignore il Node che viene passato. Un Step può anche essere avido e consumare più del singolo Node di quello che gli è stato passato. Un Step potrebbe limitare la sua transizione ad altri stati come una macchina a stati. Non riesco a rimuovere Node dall'elenco dei nodi, poiché questo mi porterebbe in raccolta modificata durante l'enumerazione dei problemi e sarebbe difficile accelerare il ciclo principale
Quale design andrebbe bene per questo?
Ecco qualcosa che ho considerato di implementare.
class Node { ... }
class Step
{
void Handle(NodeContext);
...
}
class NodeContext
{
Node Node { get; }
void Ignore();
void Consume();
}