2015-10-22 34 views
1

如何获取CatchDeclaration中实例的符号信息?基本上我想得到这个符号,以便稍后可以比较它,看看是否在该符号上调用了一个方法。从CatchDeclaration中获取符号

基本上我有这个:catch (Exception ex) {},我想SymbolInfo为“ex”。

我得到与闭锁声明:

var catchDeclaration = catchClause.DescendantNodes().OfType<CatchDeclarationSyntax>().FirstOrDefault(); 

但我似乎只能够从不能用于从语义模型得到一个象征,因为只有声明(catchDeclaration.Identifier)获得SyntaxToken需要一个SyntaxNode。

+2

您正在使用语法模型,它只会为您提供没有语义的语法信息。您需要使用语义模型来获取该信息:https://joshvarty.wordpress.com/2014/10/30/learn-roslyn-now-part-7-introducing-the-semantic-model/ –

+0

@David But我的问题是如何获取语义模型中的符号,如果我有catchDeclaration。或者在那个时候已经太晚了,我必须提前使用语义模型? (但是我不明白我是如何通过语义模型来获得catch语句或类似的呢?)。基本上'model.GetSymbolInfo(catchDeclaration.Identifier)'不起作用,因为标识符是一个令牌而不是一个节点。 – Voo

回答

3

致电semanticModel.GetDeclaredSymbol(theCatchDeclarationItself)。要调用的方法是here并且是一种扩展方法,因此请确保您已在文件顶部使用Microsoft.CodeAnalysis。

通常,当您绑定指向别处的变量时,会使用GetSymbolInfoGetDeclaredSymbol用于“让我在这里定义的符号”。