【问题标题】:Get Symbol from CatchDeclaration从 CatchDeclaration 中获取符号
【发布时间】:2015-10-22 07:42:03
【问题描述】:

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

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

我得到了 catch 声明:

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

但我似乎只能从声明 (catchDeclaration.Identifier) 中获取 SyntaxToken,它不能用于从语义模型中获取符号,因为它只需要一个 SyntaxNode。

【问题讨论】:

  • 您正在使用语法模型,它只会为您提供没有语义的语法信息。您需要使用语义模型来获取该信息:joshvarty.wordpress.com/2014/10/30/…
  • @David 但我的问题是如果我有catchDeclaration,如何从语义模型中获取符号。还是在那个时间点已经太晚了,我必须更早地使用语义模型? (但我不明白我将如何通过语义模型获得 catch 声明或类似声明?)。基本上model.GetSymbolInfo(catchDeclaration.Identifier) 不起作用,因为标识符是令牌而不是节点。

标签: c# roslyn .net-4.6


【解决方案1】:

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

一般来说,GetSymbolInfo 用于绑定指向其他地方的变量。 GetDeclaredSymbol 用于“给我这里定义的符号”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-16
    • 2013-12-09
    • 2015-03-24
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-03
    相关资源
    最近更新 更多