我正在尝试用我自己构建的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<>参数的元数据:
一个计算参数节点替换节点的函数。第一个参数是原始节点。第二个参数是已替换后代节点的相同节点。
我没有找到其他替换节点的方法。即使我返回我构建的替换节点,它仍然返回原始节点。
如何简单地替换整个节点?
Func
如何处理第二个参数感到困惑。"用替换后的子代重写相同的节点"是什么意思?这是指它是第一个参数的副本吗?如果你还没有调用ReplaceNodes
,如何使用替换节点的第一个参数的副本? - JamesFaix