从 HandleTypeDeclaration(...) 中的 SyntaxNodeAnalysisContext 获取封闭类型

Get enclosing type from SyntaxNodeAnalysisContext in HandleTypeDeclaration(...)

我的分析仪我有以下注册:

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 中,我想访问分析器当前正在处理的类型,以检查该类型是否归因于我想用来标记不应分析的类型的某些属性(如 ).

在我的本地人 window 中,我看到 SyntaxNodeAnalysisContext context 有一个名为 ContainingSymbol 的 属性,但是这个成员没有出现在 Intellisense 中。我想出了 var x = ... 的猜测,但它总是等价的吗?如何在 context 上访问 ContainingSymbol?这是获取封闭类型的正确方法吗?

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

如果您在 VS 2015 RTM 之前有向后兼容性要求,那么您别无选择,只能使用 context.SemanticModel.GetDeclaredSymbol(context.Node),它适用于 Roslyn 1.0。这应该等同于较新 Roslyn 版本中的 context.ContainingSymbol