在语义模型中查找标识符

Gro*_*kys 8 c# roslyn

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

public class FieldReference
{
    int field;

    public FieldReference()
    {
        field = 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用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);
}
Run Code Online (Sandbox Code Playgroud)

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

知道我应该怎么做吗?

Kev*_*lch 9

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

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