要查找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;
}
答案 0 :(得分:4)
SemanticModels绑定到底层的SyntaxTree,因此您只需确保这些排列。如果您有IEnumerable<SemanticModel>
,则必须执行以下操作:
var model = models.First(m => m.SyntaxTree == expressionSyntax.SyntaxTree);
选出正确的;你最好有一个Dictionary<SyntaxTree, SemanticModel>
,而不是每次都列举一个列表。我不确定你为什么要使用任何其他数据结构来保存它们。
持有SemanticModel的唯一主要优势是你可以获得一些缓存优势,在此过程中交换内存;不要抓住你不会再使用的SemanticModels了。