如何交换两个SyntaxNode(Roslyn C#)

时间:2017-04-04 14:29:10

标签: c# refactoring roslyn

我正在为visual studio 2015编写一个重构工具,我想创建一个重构类元素的重构。我的问题:我无法在SyntaxTree上交换两个SyntaxNode 。基本交换方法不起作用,因为SyntaxNode是一个引用类型,结果是执行下面代码后的firstSyntaxNode的两个副本。

SyntaxNode tmp = firstSyntaxNode;
root = root.ReplaceNode(firstSyntaxNode, secondSyntaxNode);
root = root.ReplaceNode(secondSyntaxNode, tmp);

如何交换两个SyntaxNode?

1 个答案:

答案 0 :(得分:0)

您可以通过调用ReplaceNodes

同时替换两个节点
root = root.ReplaceNodes(new[] { firstSyntaxNode, secondSyntaxNode },
    (original, _) => original == firstSyntaxNode ? secondSyntaxNode : firstSyntaxNode);