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 的唯一主要优势是您可以获得一些缓存优势,在此过程中交易内存;不要持有不再使用的语义模型。

于 2012-09-23T22:48:31.803 回答