2015-10-22 33 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用於「讓我在這裏定義的符號」。