private void InitDelegates()
            {
                _updateEnumerator = () =>
                {
                    _subEnumerator = InnerEnumerator.Current.GetEnumerator();

                    if (_keepEmptyEnumerables)

                        _updateEnumerator = () => _subEnumerator = _joinEnumerable.AppendValues(InnerEnumerator.Current).GetEnumerator();

                    else

                        _updateEnumerator = () => _subEnumerator = new JoinSubEnumerator<T>(InnerEnumerator.Current, _joinEnumerable);
                };

                _moveNext = () =>
                {

                    if (_subEnumerator == null && !_MoveNext())

                        return false;

                    _moveNext = () => __MoveNext();

                    return __MoveNext();
                };
            }