C# 为什么可以';如果初始化为null,我不能获取所有ObjectCreationExpressionSyntax吗?

C# 为什么可以';如果初始化为null,我不能获取所有ObjectCreationExpressionSyntax吗?,c#,roslyn,microsoft.codeanalysis,C#,Roslyn,Microsoft.codeanalysis,因此,我有一个MethodDeclarationSyntax节点,我正在将其传递给CSharpSyntaxWalker,具有以下覆盖 public override void VisitObjectCreationExpression(ObjectCreationExpressionSyntax node) { LiteralExpressionCollector literalCollector = new LiteralExpressionCollec

因此,我有一个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.CodeAnalysis1.3.2

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

如果您还没有尝试,它包括一个扩展,可以让您查看解析树结构。感谢Jason,这确实是一个有用的扩展。您完全正确,这就是发生的情况。我真的不明白为什么第二个案例被认为是不合格的,如果第一个不是。是否因为变量已声明,且名称前没有类型?感谢Jason Malinkwski提到的语法可视化工具在这里变得有用。使用它,您可以看到第一种情况是
LocalDeclarationStatement
包含
VariableDeclaration
包含一个
VariableDeclarator
,而第二种情况是
ExpressionStatement
包含
SimpleAssignmentExpression
。明白了!谢谢