在语义模型中查找标识符

时间:2012-08-30 09:26:16

标签: c# roslyn

假设我有一个如下所示的源文件:

public class FieldReference
{
    int field;

    public FieldReference()
    {
        field = 1;
    }
}

我正在使用SyntaxRewriter访问此文件中的所有标识符。在VisitIdentifierName方法中,我想在语义模型中查找标识符,以便发现标识符是否指向当前类的成员。

这是我到目前为止所做的:

public override SyntaxNode VisitIdentifierName(IdentifierNameSyntax node)
{
    SemanticModel model = this.compilation.GetSemanticModel(this.src);
    // ?? look up identifier in compilation here ??
    return base.VisitIdentifierName(node);
}

然而,我无法找到在语义模型中查找标识符 - SemanticModel.GetDeclaredSymbol方法没有重载接受IdentifierNameSyntax。

知道我应该怎么做吗?

1 个答案:

答案 0 :(得分:9)

您应该在表达式上使用SemanticModel.GetSymbolInfo(在这种特殊情况下为IdentifierNameSyntax)。

GetDeclaredSymbol用于从声明点(上面的int field;)到符号。要执行编译器的绑定逻辑并查看特定表达式绑定的符号,请使用GetSymbolInfo