无法获取地区位置

时间:2019-06-18 18:39:14

标签: c# roslyn

我试图获取我在一个类中拥有的所有区域,并获取其中的所有语句。当我尝试访问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());
                }
            }

        }

1 个答案:

答案 0 :(得分:0)

问题出在ToSyntaxTriviaList上。产生的琐事与语法树分离,这又意味着GetLocation抛出异常,因为它需要语法树才能起作用。

您有两个主要选择:

  1. 使用范围而不是位置
  2. 请勿使用ToSyntaxTriviaList