如果初始化为 null,为什么我不能获取所有 ObjectCreationExpressionSyntax?
Why can't I get all ObjectCreationExpressionSyntax if initialized as null?
因此,我有一个要传递给 CSharpSyntaxWalker 的 MethodDeclarationSyntax 节点,具有以下覆盖
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
问题是您在 VisitAssignmentExpression
中的代码在遇到赋值表达式时会立即停止语法遍历。如果你想继续遍历它的子节点,你可以在方法中添加base.VisitAssignmentExpression(node);
。
因此,我有一个要传递给 CSharpSyntaxWalker 的 MethodDeclarationSyntax 节点,具有以下覆盖
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
问题是您在 VisitAssignmentExpression
中的代码在遇到赋值表达式时会立即停止语法遍历。如果你想继续遍历它的子节点,你可以在方法中添加base.VisitAssignmentExpression(node);
。