Roslyn 更改节点引用

Roslyn changing node references

因为节点是不可变的,每次创建新实例时我的引用都会过时。处理这个问题的最佳方法是什么?我正在重构以将 class 定义上移一级。首先,我将它添加到祖父节点,但随后我对 class 定义节点的引用已过时,我无法使用它。

var nodeExpression
var nodeMethod
var nodeClassDef

当我修改nodeExpression时,一个全新的世界就生成了;我怎样才能快速获得新世界中 nodeMethodnodeClassDef 的匹配节点?

看看在更改后要查找的节点上创建 SyntaxAnnotations。一种方便的方法是通过 SyntaxNode.

上的 TrackNodes() 扩展方法

您可以提供节点列表,然后在使用 GetCurrentNodes() 重写后找到它们。