private static List <Identifier> GetIdentifiers(Identifier cur, List <IdentifierPartTemplate> templates,
                                                        DebuggerOperations debuggerOperations)
        {
            if (templates.Count == 0)
            {
                return(new List <Identifier> {
                    cur
                });
            }

            var head = templates.FirstOrDefault();

            Debug.Assert(head != null, nameof(head) + " != null");

            int begin = GetNumber(head.BeginTemplate ?? "", cur, debuggerOperations, $"Begin range of index {head.Name} in {cur.Name}");
            int end   = GetNumber(head.EndTemplate ?? "", cur, debuggerOperations, $"End range of {head.Name} index in {cur.Name}");
            var res   = new List <Identifier>();

            for (int i = begin; i < end; i++)
            {
                var part    = new IdentifierPart(head.Name, i);
                var partRes = GetIdentifiers(cur.AddIdentifierPart(part), templates.Skip(1).ToList(), debuggerOperations);
                res.AddRange(partRes);
            }

            return(res);
        }
        public Identifier AddIdentifierPart(IdentifierPart part)
        {
            var list = new List <IdentifierPart>(IdentifierParts)
            {
                part
            };

            return(new Identifier(Name, list));
        }