我正在根據某些條件使用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
但現在看來,它是分析單個節點每次它訪問一個節點,並只能在同一時間修改單個節點。在我的場景中,我將不得不訪問特定節點,對其進行更改,並根據對訪問節點所做的更改刪除其他節點。