CompiledHandlebars.Compiler.CodeGeneration.CompilationState.GetQueryElements C# (CSharp) Method

GetQueryElements() private method

Returns a list of strings of the elements of a context which needs to be checked. I.e. if the path in contextToCheck is "viewModel.Parent.Child" and the path in lastCheckedContext is "viewModel" it will return { "viewModel.Parent", "viewModel.Parent.Child" } Also unreachable code is detected
private GetQueryElements ( Context lastCheckedContext, Context contextToCheck ) : List
lastCheckedContext CompiledHandlebars.Compiler.Introspection.Context
contextToCheck CompiledHandlebars.Compiler.Introspection.Context
return List
    private List<string> GetQueryElements(Context lastCheckedContext, Context contextToCheck)
    {//Items -> ItemsTitle
      var resultList = new List<string>();      
      var lastCheckedElements = lastCheckedContext?.FullPath.Split('.') ?? new string[0];
      var pathToCheckElements = contextToCheck.FullPath.Split('.');        
      List<string> relevantElements = new List<string>();
      List<string> prefixElements = new List<string>();
      if (lastCheckedElements.Any())
      {
        int i = 0;
        for (i = 0; i < Math.Min(lastCheckedElements.Length, pathToCheckElements.Length); i++)
        {
          if (lastCheckedElements[i].Equals(pathToCheckElements[i]))
            prefixElements.Add(lastCheckedElements[i]);
          else
            break;
        }
        if (pathToCheckElements.Length > i)
          relevantElements.AddRange(pathToCheckElements.Skip(i));
      }
      else
        relevantElements = pathToCheckElements.ToList();
      string prefix = prefixElements.Any() ? string.Join(".", prefixElements) + ".": string.Empty;
      for (int i = 1; i <= relevantElements.Count; i++)
      {//then join them back together with the prefix        
        resultList.Add(string.Concat(prefix, string.Join(".", relevantElements.Take(i).ToArray())));
      }
      return resultList;
    }