首页 > 解决方案 > 获取 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 
        }
    }
}

标签: c#roslyn

解决方案


您需要检索 以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;
        }
    }
}

推荐阅读