InvocationExpressionSyntax

InvocationExpressionSyntax

我正在尝试用自己构造的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的元数据:  为参数节点计算替换节点的函数。首先  参数是原始节点。第二个参数是相同的节点重写  与替换后代。没有其他方法可以替换我可以找到的节点。即使当我返回构建的替换节点时,它也仅返回原始节点。如何简单地替换整个节点? (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 您的代码段使我有些困惑。 ReplaceNodes替换第一个参数中指定的节点,因此第一个参数应该是现有节点的列表,而不是新节点。您只需在lambda中为第二个参数创建新节点,然后在树中替换它们。如果必须知道当前要替换的节点,请查看两个参数中的第一个(示例中为“ old”)以了解其含义。关于c# - 被SyntaxNode.ReplaceNodes <>()混淆,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11963106/ (adsbygoogle = window.adsbygoogle || []).push({});
10-09 23:03