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宣言ポイント(int field;上記)からシンボルに移動するためのものです。コンパイラのバインディングロジックを実行し、特定の式がどのシンボルにバインドするかを確認するには、を使用しますGetSymbolInfo

于 2012-08-30T15:27:50.630 に答える