0

この InvocationExpression がGetDelegate<Func<double,double,double>>("Add")()あるとします。ArgumentListSyntax にある Open/Close 括弧を削除するにはどうすればよいですか?
Node.ReplaceNodes<>() メソッドを理解しようとしていますが、それでも Nodes を何も置き換えない方法がわかりません。

私はこのサンプル コードをチェックしていましたが、彼は変更するためだけにノード全体をコンポーネントの断片に分解しました。これを行う簡単な方法はありませんか?私はどんな種類の Node.RemoveNode()方法も見つけることができません。

私もこのようなことをしようとしていましたが、成功しませんでした:

argNodeMinusParen = argNodeMinusParen.WithArgumentList(argNodeMinusParen .ArgumentList.ReplaceToken(Syntax.Token(SyntaxKind.OpenParenToken), Syntax.Token(SyntaxKind.WhitespaceTrivia)));

明確化: この InvocationExpression を次のように変更しようとしています。

GetDelegate<Func<double,double,double>>("Add")()

GetDelegate<Func<double,double,double>>("Add")

私が解決しようとしている問題:

このコードから始めます。

    private void Init()
    {
        StoredMethods.Add("Add", /*new InvocationExpression for identical signature method as controller.Add*/);
        StoredMethods.Add("Mul", /*new InvocationExpression for identical signature method as controller.SubMember.Mul*/);
    }

    private void RandomMethod()
    {
        var result = controller.SubMember.Mul(2, 3);
        var result2 = controller.Add(5, 5);
        var result3 = controller.Add(controller.SubMember.Mul(4, 5), 6);
        var result4 = controller.Subtract(5, controller.Add(1, 1));
    }

    public Dictionary<string, InvocationExpressionSyntax> StoredMethods
    {
        get;
        set;
    }

これに変身させたい。これは単なる半疑似コードであることに注意してください。実際には、より複雑な静的ジェネリック型のものを多数実行しています。これは、わかりやすくするために単純化されています。

プロジェクト全体で見つかった呼び出しごとに、メソッド名が StoredMethods で見つかった場合は、呼び出しを StoredMethod 呼び出しに置き換えます。結果は次のようになります。

    private void RandomMethod()
    {
        var result = StoredMethods.GetDelegate("Mul")(2, 3);
        var result2 = StoredMethods.GetDelegate("Add")(5, 5);
        var result3 = StoredMethods.GetDelegate("Add")(StoredMethods.GetDelegate("Mul")(4, 5), 6);
        var result4 = controller.Subtract(5, StoredMethods.GetDelegate("Add")(1, 1));
    }//Notice that Subtract was NOT substituted, because it wasn't in StoredMethods, where Add was replaced in the inner arg

私のより大きな問題は、ネストされた/合成されたクラスとメンバーを処理する方法を理解しようとしています。再帰は複数のMemeberAccess式を処理できると思いますが、問題を分解して頭を包むのは困難です。また、私はSyntaxRewriter各ノードを訪問するために使用しているので、そこにコンパイルユニットを持ち込む方法がわかりません

4

1 に答える 1