从 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
。
我的分析仪我有以下注册:
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
。