internal NodeReference CopyReference(NodeReference reference)
        {
            var result = CreateNodeReference();

            result.SetName(reference.GetName());

            var subscriptCount = reference.GetSubscriptCount();

            if (subscriptCount <= 0)
            {
                return(result);
            }

            for (var position = 1; position <= subscriptCount; position++)
            {
                var subscript = reference.GetObjectSubscript(position);

                if (subscript is int)
                {
                    result.AppendSubscript((int)subscript);
                }
                else if (subscript is long)
                {
                    result.AppendSubscript((long)subscript);
                }
                else if (subscript is double)
                {
                    result.AppendSubscript((double)subscript);
                }
                else
                {
                    result.AppendSubscript((string)subscript);
                }
            }

            return(result);
        }