如何使用SyntaxWalker枚举SyntaxTree中的兄弟节点

时间:2017-11-15 13:18:03

标签: vb.net roslyn

是否可以在SyntaxTree中调节节点的兄弟节点?

在以下示例中,如何获取节点列表(橙色圆圈),这些节点是标记为橙色箭头的节点的兄弟节点?

 If dayW = DayOfWeek.Wednesday Then

enter image description here

1 个答案:

答案 0 :(得分:1)

如果语句节点 MultiLineIfStatement 的父级提供详细信息如果结束时语句以及< strong> MultiLineIfStatement.ElseIfBlocks 提供有关 Else ElseIf 语句的信息。

这是我的 VisitIfStatement methed:

public override void VisitIfStatement(IfStatementSyntax node)
  {
     base.VisitIfStatement(node);
     var Block = node.Parent as MultiLineIfBlockSyntax;

     Location Location = Block.GetLocation();
     FileLinePositionSpan LinePosition = Location.GetLineSpan();

     int Level = IndentLevel(Block);

     // Process If and EndIf staments Details here

     // Get the list of ElseIf blocks and Else Block 
     SyntaxList<ElseIfBlockSyntax> ElseIfBlocks = Block.ElseIfBlocks;
     ElseBlockSyntax ElseBlock = Block.ElseBlock;

     / Process ElseIf blocks
     for (int i = 0; i <= ElseIfBlocks.Count - 1; i++)
     {
        ElseIfBlockSyntax ElseIfBlock = ElseIfBlocks[i];
        Location = ElseIfBlock.GetLocation();
        LinePosition = Location.GetLineSpan();

        // **Process ElseIf statements here**

     }

     if (ElseBlock != null)
     {
        Location = ElseBlock.GetLocation();
        LinePosition = Location.GetLineSpan();

       // **Process ElseBlock Details here**
     }
  }