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<> 引数のメタデータ:
引数ノードの置換ノードを計算する関数。最初の引数は元のノードです。2 番目の引数は、置き換えられた子孫で書き換えられた同じノードです。
私が見つけたノードを置き換える方法は他にありません。構築した代替ノードを返却しても、元のノードが返却されるだけです。
ノード全体を単純に置き換えるにはどうすればよいですか?