代码之家  ›  专栏  ›  技术社区  ›  David

从HandleTypeDeclaration(…)中的SyntaxNodeAnalyysisContext获取封闭类型

  •  2
  • David  · 技术社区  · 10 年前

    我的分析仪注册如下:

    public override void Initialize(AnalysisContext context)
    {
      context.RegisterCompilationStartAction(HandleCompilationStart);
    }
    
    private static void HandleCompilationStart(CompilationStartAnalysisContext context)
    {
      context.RegisterSyntaxNodeAction(
        HandleTypeDeclaration,
        ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration));
    }
    
    private static void HandleTypeDeclaration(SyntaxNodeAnalysisContext context)
    {
      var x = context.SemanticModel.GetDeclaredSymbol(context.Node);
      ...
    }
    

    在里面 HandleTypeDeclaration 我想访问分析器当前正在处理的类型,以检查类型是否由我想用来标记不应该分析的类型的某个属性所赋予(如 this question ).

    在我当地的窗户里我看到了 SyntaxNodeAnalysisContext context 具有名为的属性 ContainingSymbol 具有,但此成员在Intellisense中未显示。我猜出来了 var x = ... 但它总是等价的吗?如何访问 包含符号 在…上 context ? 这是获取封闭类型的正确方法吗?

    locals window

    1 回复  |  直到 9 年前
        1
  •  2
  •   Tamas    10 年前

    在版本1.0.0中 SyntaxNodeAnalysisContext 不包含属性 ContainingSymbol .VS之所以看到它,是因为您有一个已包含它的更新。

    如果在VS 2015 RTM之前您有向后兼容性需求,那么除了使用 context.SemanticModel.GetDeclaredSymbol(context.Node) ,在Roslyn 1.0中有效。这应该相当于 context.ContainingSymbol 在更新的Roslyn版本中。