У меня есть объявление сгенерированной переменной с использованием SyntaxFactory.VariableDeclaration
и список SyntaxNode
собран в соответствии с некоторыми условиями.Как удалить список SyntaxNode из документа с использованием API-интерфейсов поставщика кода Roslyn?
я сделал следующее:
Изменить Узел
var newRoot = root.ReplaceNode(expression, newVariableDeclaration)
Это успешно модифицированному узел с
newVariableDeclaration
.В цикле удалить узлы, соответствующие тем, которые присутствуют в списке
foreach (var listObject in listObjects) { newRoot = newRoot.RemoveNode(listObject, SyntaxRemoveOptions.KeepNoTrivia); }
Это не меняет
newRoot
, и все необходимое дляlistObject
быть изменен остается тем же самым.
Если мы используем root.RemoveNode(listObject, SyntaxRemoveOptions.KeepNoTrivia)
вместо этого он будет, очевидно, держать на замене предыдущих изменений.
Так вот newVariableDeclaration
является только узел, который изменяется во всем документе, это потому, что newRoot
SyntaxNodes
есть изменения от такового в SyntaxNode
, что я получил от root
.
Пожалуйста, исправьте меня, если я сделаю это неправильно.
EDIT: Я посмотрел в CSharpSyntaxRewriter
, но оказывается, что он анализирует один узел каждый раз он посещает узел и может изменить только один узел одновременно. В моем сценарии мне придется посетить определенный узел, внести в него изменения и удалить другие узлы в отношении изменений, внесенных в посещаемый узел.