c# - 获取 ReferencedSymbol 的方法名
问题描述
我有来自方法符号的引用,但我需要获取调用方法符号的方法的名称。知道如何从参考对象中提取这些信息吗?这是代码:
var references = SymbolFinder.FindReferencesAsync(symbol, solution).Result;
if (references != null && references.Any())
{
foreach (var reference in references)
{
foreach (var location in reference.Locations)
{
// Get name of the method of the reference
}
}
}
解决方案
您需要检索 以SemanticModel
供参考,然后您应该获得包含您的参考的最里面的封闭符号:
...
foreach (var location in reference.Locations)
{
if (location.Document.TryGetSemanticModel(out var referenceSemanticModel))
{
var enclosingSymbol = referenceSemanticModel.GetEnclosingSymbol(location.Location.SourceSpan.Start);
if (!(enclosingSymbol is null))
{
// NOTE: if your symbol are referenced by lambda then this name
// would be the innermost enclosing member which contains lambda,
// so be careful
var name = enclosingSymbol.Name;
}
}
}
推荐阅读
- javascript - 移动播放器 javascript
- java - 从 AppContext 中删除类的 Java 9+ 等价物是什么?需要重新加载 PrintServiceLookup 类
- android - 如何通过 DI (Koin) 向 @BindingAdapter 方法提供一些东西?
- kubernetes - 定义部署依赖项
- r - 如何从一组观察中生成经验 cdf?
- c# - 尝试编写 2D Unity 代码来显示我的角色是否接地并且它不工作
- 3d - Marlin 2.0 在运行时更改床尺寸
- c# - 两个具有相同内容的 DataGridView。我可以使用相同的列名吗?
- matlab - 在 Matlab 中的两个地图轴之间切换
- ruby - 将系统时间转换为 utc 并将 utc 转换为系统失败