我试图获取我在一个类中拥有的所有区域,并获取其中的所有语句。当我尝试访问SyntaxTrivia对象的位置时,应用程序将引发NullReferenceException
我创建了一个字典来存储区域的开始和结束位置。我正在遍历每个区域并尝试获取位置。
private static void Analyze(SyntaxNodeAnalysisContext context)
{
ClassDeclarationSyntax classDeclaration = (ClassDeclarationSyntax)context.Node;
SyntaxTriviaList regions = classDeclaration.DescendantTrivia().ToImmutableList()
.FindAll(x => x.Kind().Equals(SyntaxKind.RegionDirectiveTrivia) || x.Kind().Equals(SyntaxKind.EndRegionDirectiveTrivia))
.ToSyntaxTriviaList();
Dictionary<Location, Location> regionLocations = new Dictionary<Location, Location>();
Location regionStart = classDeclaration.GetLocation();
foreach (SyntaxTrivia region in regions)
{
if (regions.IndexOf(region) / 2 == 0)
{
Location ll = region.GetLocation();
regionLocations.Add(region.GetLocation(), region.GetLocation());
regionStart = region.GetLocation();
}
else
{
regionLocations.Add(regionStart, region.GetLocation());
}
}
}
答案 0 :(得分:0)
问题出在ToSyntaxTriviaList
上。产生的琐事与语法树分离,这又意味着GetLocation
抛出异常,因为它需要语法树才能起作用。
您有两个主要选择:
ToSyntaxTriviaList