gpt4 book ai didi

c# - Roslyn - 查找对具有调用详细信息的方法的所有引用(具体的通用参数)

转载 作者:行者123 更新时间:2023-12-04 08:42:24 25 4
gpt4 key购买 nike

假设我有一个带有一些通用方法的接口(interface),比如这个:

public interface IService
{
Task DoGenericAsync<T>();
}
然后我有一堆项目的一些解决方案,我有以下引用资料:
class SomeDomainService
{
private readonly IService _service;

public Task Process()
=> _service.DoGenericAsync<A>();
}
现在的目标是找到这个方法的所有调用以及更重要的——具体的泛型参数是什么。在这种特殊情况下,我想找到 IService.DoGenericAsync<T>()使用通用参数 <A> 调用.
因此,遵循几个教程和问题,我可以通过查找 ISymbol 找到使用 Roslyn 的目标方法的所有引用。我的接口(interface)方法声明然后调用 SymbolFinder.FindReferencesAsync获取所有引用资料。
这很好用,我得到了正确的调用位置( ReferencedSymbol 实例的集合,但是这些结果的 Definition 属性只返回了符号的一般信息(嗯,确切的定义:)),所以我该怎么做找出真正的论点是什么?

最佳答案

所以ReferenceLocation有两个属性,一个 DocumentLocation .该文档允许您获取 SyntaxTreeSemanticModel .当您拥有 SyntaxTree , 你可以调用 FindNode 并传入 Location.SourceSpan ,这应该让你得到调用节点。从那里您可以调用SemanticModel.GetSymbolInfo这将为您提供一个包含方法符号的结构,然后您可以从那里查看类型参数。

关于c# - Roslyn - 查找对具有调用详细信息的方法的所有引用(具体的通用参数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64497148/

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