假设我有一个如下所示的源文件:
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。
知道我应该怎么做吗?
答案 0 :(得分:9)
您应该在表达式上使用SemanticModel.GetSymbolInfo
(在这种特殊情况下为IdentifierNameSyntax
)。
GetDeclaredSymbol
用于从声明点(上面的int field;
)到符号。要执行编译器的绑定逻辑并查看特定表达式绑定的符号,请使用GetSymbolInfo
。