8

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

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);
}

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

知道我应该怎么做吗?

4

1 回答 1

9

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

GetDeclaredSymbol is for going from the declaration point (int field; above) to a symbol. To perform the compiler's binding logic and see what symbol a particular expression binds to, use GetSymbolInfo.

于 2012-08-30T15:27:50.630 回答