gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 21:55:20 25 4
gpt4 key购买 nike

为了找到 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;
}

最佳答案

SemanticModels 绑定(bind)到一个底层的 SyntaxTree,因此您只需要确保它们对齐即可。如果你有一个 IEnumerable<SemanticModel>你只需要做:

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

选择合适的;你最好有一个 Dictionary<SyntaxTree, SemanticModel>而不是每次都列举一个列表。我不确定您为什么要使用任何其他数据结构来保存它们。

坚持使用 SemanticModel 的唯一主要优势是您可以获得一些缓存优势,在此过程中交换内存;不要坚持你不会再使用的语义模型。

关于c# - 如何确定哪个 SemanticModel 实例解析 ExpressionSyntax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12556492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com