如何交换两个 SyntaxNode (Roslyn C#)
How to swap two SyntaxNode (Roslyn C#)
我目前正在为 visual studio 2015 编写一个重构工具,我想创建一个重新排序 class 元素的重构。我的问题:我无法在 SyntaxTree 中交换两个 SyntaxNode。基本的swap方法不起作用,因为SyntaxNode是一个引用类型,下面的代码执行后结果是firstSyntaxNode的两个副本。
SyntaxNode tmp = firstSyntaxNode;
root = root.ReplaceNode(firstSyntaxNode, secondSyntaxNode);
root = root.ReplaceNode(secondSyntaxNode, tmp);
如何交换两个 SyntaxNode?
您可以通过调用 ReplaceNodes
:
同时替换两个节点
root = root.ReplaceNodes(new[] { firstSyntaxNode, secondSyntaxNode },
(original, _) => original == firstSyntaxNode ? secondSyntaxNode : firstSyntaxNode);
我目前正在为 visual studio 2015 编写一个重构工具,我想创建一个重新排序 class 元素的重构。我的问题:我无法在 SyntaxTree 中交换两个 SyntaxNode。基本的swap方法不起作用,因为SyntaxNode是一个引用类型,下面的代码执行后结果是firstSyntaxNode的两个副本。
SyntaxNode tmp = firstSyntaxNode;
root = root.ReplaceNode(firstSyntaxNode, secondSyntaxNode);
root = root.ReplaceNode(secondSyntaxNode, tmp);
如何交换两个 SyntaxNode?
您可以通过调用 ReplaceNodes
:
root = root.ReplaceNodes(new[] { firstSyntaxNode, secondSyntaxNode },
(original, _) => original == firstSyntaxNode ? secondSyntaxNode : firstSyntaxNode);