我正在根据某些条件使用SyntaxFactory.VariableDeclaration
和SyntaxNode
收集的自定义生成变量声明。如何使用Roslyn代码修复提供程序API从文档中删除SyntaxNode列表?
我做了以下内容:
修改
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
具有不同于我从root
获得SyntaxNode
的变化。
请纠正我,如果我做错了。
编辑: 我看着CSharpSyntaxRewriter
但现在看来,它是分析单个节点每次它访问一个节点,并只能在同一时间修改单个节点。在我的场景中,我将不得不访问特定节点,对其进行更改,并根据对访问节点所做的更改删除其他节点。