1

私が呼び出すExpressionSyntaxインスタンスのターゲットを見つけるために、mySemanticModel.GetSymbolInfo(myExpressionSyntax).
それぞれがコードファイルの構文ツリーに関連するいくつかのSemanticModelインスタンスがあります。

セマンティックモデルを繰り返し、シンボル情報を返すための適切なモデルを見つけたいのですが、例外を使用せずに適切なセマンティックモデルをテストする方法がわかりません。

次のコードを完成させる必要があります。

SymbolInfo? Resolve(ExpressionSyntax expressionSyntax)
{
    foreach (SemanticModel semanticModel in allSemanticModels)
    {
        if ( /* test if expression syntax found in semantic model */ )
        {
            return semanticModel.GetSymbolInfo(expressionSyntax);
        }
    }
    return null;
}
4

1 に答える 1

4

SemanticModelsは基礎となるSyntaxTreeにバインドされているため、それらが整列していることを確認する必要があります。あなたが持っていた場合、あなたはただしなければならIEnumerable<SemanticModel>ないでしょう:

var model = models.First(m => m.SyntaxTree == expressionSyntax.SyntaxTree);

正しいものを選ぶために; Dictionary<SyntaxTree, SemanticModel>毎回リストを列挙するよりも、持っている方が良いでしょう。それらを保持するために他のデータ構造を使用する理由が正確にはわかりません。

SemanticModelを保持することの唯一の主な利点は、キャッシュの利点が得られ、その過程でメモリを交換できることです。もう使用しないSemanticModelsを保持しないでください。

于 2012-09-23T22:48:31.803 に答える