我如何在源文件中找到声明所在的行号?

最佳答案

免责声明:我在Roslyn团队为Microsoft工作。

您可以使用ISyntaxTree.GetLineSpan()方法转换为行号。例如,给定一个ISymbol“symbol”,您可以使用以下命令获取第一个定义的开始位置:

var loc = symbol.Locations.First();
var lineSpan = loc.SourceTree.GetLineSpan(loc.SourceSpan,
    usePreprocessorDirectives: false);
var line = lineSpan.StartLinePosition.Line;
var character = lineSpan.StartLinePosition.Character;

从标题看来,您似乎是从SyntaxNode开头的,因此您可以直接使用Span属性。

09-26 17:17