如何将ExpressionStatementSyntax转换为ParenthesizedExpressionSyntax(在表达式周围加上括号)

时间:2012-08-27 19:44:22

标签: c# roslyn

假设我在语法树中有"".GetType() ExpressionStatementSyntax(或者可能是InvocationExpressionSyntax),我想把它变成("".GetType()),我想转向我的ExpressionStatementSyntax节点进入ParenthesizedExpressionSyntax节点。我该怎么做?

1 个答案:

答案 0 :(得分:3)

using System;
using System.Linq;
using Roslyn.Compilers;
using Roslyn.Compilers.CSharp;

class Program
{
    static void Main(string[] args)
    {
        var oldRootNode = Syntax.ParseCompilationUnit(
            "class C { void M() { \"\".GetType(); } }");
        var oldStatementNode = oldRootNode.DescendantNodes().OfType<ExpressionStatementSyntax>().First();
        var oldExpressionNode = oldStatementNode.Expression;
        var newExpressionNode = Syntax.ParenthesizedExpression(oldExpressionNode);
        var newRootNode = oldRootNode.ReplaceNode(oldExpressionNode, newExpressionNode);
        Console.WriteLine(oldRootNode.ToString());
        Console.WriteLine(newRootNode.ToString());
    }
}