0

因此,我有一个 MethodDeclarationSyntax 节点,我将其传递给 CSharpSyntaxWalker,并具有以下覆盖

        public override void VisitObjectCreationExpression(ObjectCreationExpressionSyntax node)
    {
        LiteralExpressionCollector literalCollector = new LiteralExpressionCollector();
        literalCollector.Visit(node.ArgumentList);
        if (literalCollector.Literals.Count > 0)
            Creations.Add(node, literalCollector.Literals);
    }

        public override void VisitAssignmentExpression(AssignmentExpressionSyntax node)
    {
        LiteralExpressionCollector literalCollector = new LiteralExpressionCollector();
        var assigment = node.ChildNodes().FirstOrDefault(l => l is LiteralExpressionSyntax);
        if(assigment != null)
            literalCollector.Visit(assigment);
        if (literalCollector.Literals.Count > 0)
            Assigments.Add(node, literalCollector.Literals);

    }

它以下列形式捕获所有 ObjectCreationExpressionSyntax:

ResolveBomForMaterialInput rbfmiInput = new ResolveBomForMaterialInput()

但不是以下内容:

FlowStructureScenario flowScenario = null;
flowScenario = new FlowStructureScenario("F", "F:3");

知道为什么会这样吗?我认为这并不重要,但我使用 SyntaxWalkerDepth.Token 作为深度。

当前使用的版本:Microsoft.CodeAnalysis 1.3.2

4

1 回答 1

1

问题是您的代码在VisitAssignmentExpression遇到赋值表达式时立即停止语法遍历。如果要继续遍历其子节点,可以添加base.VisitAssignmentExpression(node);到方法中。

于 2017-03-13T22:43:39.557 回答