Io sono la creazione di un Fix codice che cambia in questo modo:Come posso creare una nuova radice aggiungendo e rimuovendo i nodi recuperati dalla vecchia radice?
if(obj is MyClass)
{
var castedObj = obj as MyClass;
}
in questo:
var castedObj = obj as MyClass;
if(castedObj != null)
{
}
Questo significa che devo fare 3 cose:
- cambiare la condizione in
if
dichiarazione. - Spostare il cast direttamente sopra l'istruzione
if
. - Rimuovi l'istruzione nel corpo.
Finora, tutti i miei tentativi mi hanno impedito di sfruttare al massimo 2 di queste cose.
Credo che questo problema si verifichi perché fondamentalmente si hanno 2 nodi di sintassi allo stesso livello. In quanto tale, la modifica di uno di essi invalida la posizione dell'altro. O qualcosa di simile. Per farla breve: riesco a copiare l'assegnazione della variabile al di fuori dell'istruzione if
o riesco a modificare la condizione + rimuovere l'assegnazione della variabile. Mai tutto 3.
Come risolverei questo?
Per buona misura, qui è il mio codice, che cambia la condizione e rimuove l'assegnazione:
var newIfStatement = ifStatement.RemoveNode(
variableDeclaration,
SyntaxRemoveOptions.KeepExteriorTrivia);
newIfStatement = newIfStatement.ReplaceNode(newIfStatement.Condition, newCondition);
var ifParent = ifStatement.Parent;
var newParent = ifParent.ReplaceNode(ifStatement, newIfStatement);
newParent = newParent.InsertNodesBefore(
newIfStatement,
new[] { variableDeclaration })
.WithAdditionalAnnotations(Formatter.Annotation);
var newRoot = root.ReplaceNode(ifParent, newParent);
Vorrei averlo saputo prima di questa lezione: nessuna scocciatura con nodi immutabili non funzionanti. Solo poche righe di codice per sostituire tutto quanto sopra e si legge in modo molto scorrevole. Modificherò la tua risposta per includere il codice che ho usato per essere completo. –