我正在尝试用我自己构造的 InvocationExpressionSyntax 节点替换 InvocationExpressionSyntax 节点。
到目前为止,我发现的唯一方法是使用 SyntaxNode.ReplaceNodes<>,但我很难理解它是如何工作的。
这是一个代码片段
public override SyntaxNode VisitInvocationExpression(InvocationExpressionSyntax node)
{
InvocationExpressionSyntax replacementNode = (constructing my own invocation node, etc.
node = (InvocationExpressionSyntax)node.ReplaceNodes(new List<InvocationExpressionSyntax>() { replacementNode /* ##Solution: This should be the EXISTING node, not the replacement node*/ }, new Func<InvocationExpressionSyntax, InvocationExpressionSyntax, SyntaxNode>((old, old2) =>
{
//return what? old and old2 are both unmodified at this point. Doing another node.replacenodes in here doesn't work either. How do I replace node?
//even the following doesn't work.
return replacementNode;
}));
}
方法的 Func<> arg 的元数据:
计算参数节点的替换节点的函数。第一个参数是原始节点。第二个参数是用替换的后代重写的同一节点。
没有其他方法可以替换我能找到的节点。即使我返回我构建的替换节点,它也只是返回原始节点。
如何简单地替换整个节点?