private TraversalBranch NextBranchFromSelector(TraversalContext metadata, BranchSelector selector, bool switchIfExhausted) { TraversalBranch result = selector.Next(metadata); if (result == null) { _selectors[_selectorIndex] = _emptySelector; if (switchIfExhausted) { result = NextSelector().next(metadata); if (result == null) { _selectors[_selectorIndex] = _emptySelector; } } } return(result); }