private static void RecurGetStatesInternal <T>(IRegexFSMState <T> startState, HashSet <IRegexFSMState <T> > states) { if (states.Add(startState)) { foreach (var transition in startState.Transitions.Where(transition => transition.Target != null)) { RegexFSMUtility.RecurGetStatesInternal(transition.Target, states); } } }
/// <summary> /// 递归获取指定起始状态开始能达到的所有状态的集合。 /// </summary> /// <param name="startState">指定的起始状态。</param> /// <returns>指定起始状态开始能达到的所有状态的集合。</returns> /// <exception cref="ArgumentNullException"><paramref name="startState"/> 的值为 null 。</exception> public static IEnumerable <IRegexFSMState <T> > RecurGetStates <T>(this IRegexFSMState <T> startState) { if (startState == null) { throw new ArgumentNullException(nameof(startState)); } HashSet <IRegexFSMState <T> > states = new HashSet <IRegexFSMState <T> >(); RegexFSMUtility.RecurGetStatesInternal(startState, states); return(states); }