C# 如何确定哪个SemanticModel实例解析ExpressionSyntax

C# 如何确定哪个SemanticModel实例解析ExpressionSyntax,c#,roslyn,C#,Roslyn,要查找ExpressionSyntax实例的目标,我调用mySemanticModel.GetSymbolInfo(myExpressionSyntax)。 我有几个SemanticModel实例,每个实例都与代码文件的语法树相关 我想迭代语义模型并找到合适的模型来返回符号信息,但我看不到如何在不使用异常的情况下测试合适的语义模型 我需要完成以下代码: SymbolInfo? Resolve(ExpressionSyntax expressionSyntax) { foreach (Se

要查找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;
}

语义模型被绑定到一个底层的SyntaxTree,所以您只需要确保这些模型是对齐的。如果您有一个
IEnumerable
,您只需执行以下操作:

var model = models.First(m => m.SyntaxTree == expressionSyntax.SyntaxTree);
挑对了,;你最好有一本
字典
,而不是每次都列举一个列表。我不知道你为什么要用其他数据结构来保存它们


保留SemanticModel的唯一主要优点也是可以获得一些缓存好处,在这个过程中交换内存;不要保留不再使用的语义模型。

语义模型绑定到一个底层的语法树,所以您只需要确保这些语义模型是对齐的。如果您有一个
IEnumerable
,您只需执行以下操作:

var model = models.First(m => m.SyntaxTree == expressionSyntax.SyntaxTree);
挑对了,;你最好有一本
字典
,而不是每次都列举一个列表。我不知道你为什么要用其他数据结构来保存它们


保留SemanticModel的唯一主要优点也是可以获得一些缓存好处,在这个过程中交换内存;不要再使用语义模型了。

非常感谢,Jason!字典提示非常有意义,因为语法树可以输入——干杯。非常感谢,Jason!字典提示非常有意义,因为语法树可以输入——干杯。