我想编写一个方法来确保树中的所有if语句后面都有支撑代码块。这里是我的代码:重写if语句:其中一条语句以一对太括号结尾
class Program
{
static void Main(string[] args)
{
var tree = CSharpSyntaxTree.ParseText(@"
class Program
{
static void main()
{
if(true)
Console.WriteLine(""It was true!"");
if(false)
Console.WriteLine(""It was false!"");
}
}");
var root = tree.GetRoot();
var rewriter = new MyRewriter();
var newRoot = rewriter.Visit(root);
var ifStatements = newRoot.DescendantNodes().OfType<IfStatementSyntax>();
foreach (var ifStatement in ifStatements)
{
SyntaxNode newIfStatement = rewriter.VisitIfStatement(ifStatement);
newRoot = newRoot.ReplaceNode(ifStatement, newIfStatement);
}
var result = newRoot;
Console.WriteLine(result.ToString());
Console.ReadKey();
}
}
public class MyRewriter: CSharpSyntaxRewriter
{
public override SyntaxNode VisitIfStatement(IfStatementSyntax node)
{
var body = node.Statement;
var block = SyntaxFactory.Block(body);
var newIfStatement = node.WithStatement(block);
return newIfStatement;
}
}
这里是我的输出:
类节目 { 静态无效的主要(){ 如果 (真){{
Console.WriteL国家统计局(”这是真的!“);如果(假){
Console.WriteLi ne(“It was false!”);}}
if }
} }
正如你可以看到,下面的第一if语句的代码块被支撑两次(不如预期),而下面的第二码块if语句仅支撑一次(如预期)。
我确信我对Roslyn的工作原理有一些错误的假设,所以有人会好心地告诉我哪里出了问题?我应该做什么改变?
非常感谢您的帮助!你能激励你为什么建议我应用格式? –
因为如果你没有这个注释打印它,它看起来像这样:http://i.imgur.com/0cvpZaR.png这不是很漂亮;-)通过注释你可以得到这个:http://i.imgur。 com/uXZAQ8k.png –
这些截图非常有用 - 谢谢! –