//------------------------------------------------------------- // 概要:次スレ候補を取得する //------------------------------------------------------------- public bool ChangeCandidateThread() { if (SelectThread.ThreadNo != null) { var openedThreads = new List <string>(); Func <bool> f = () => { // 現在のスレッドタイトル名に数字が含まれていれば次のスレ番のスレを探す var regex = new Regex(@"(\d+)"); var compare = CultureInfo.CurrentCulture.CompareInfo; foreach (Match match in regex.Matches(SelectThread.ThreadTitle)) { var number = TextUtil.FullWidthToHalfWidth(match.Captures[0].Value); var nextNumber = int.Parse(number) + 1; var threads = ThreadList.Where(info => compare.IndexOf(info.ThreadTitle, nextNumber.ToString(), CompareOptions.IgnoreWidth) != -1) .Where(x => !openedThreads.Contains(x.ThreadNo)) .OrderByDescending(info => info.ThreadSpeed); if (!threads.Any()) { continue; } ChangeThread(threads.First().ThreadNo); openedThreads.Add(threads.First().ThreadNo); return(true); } return(false); }; for (;;) { // 次スレが見つからない場合ループを抜ける if (!f()) { break; } // 埋まっていないスレになったら終わり if (!SelectThread.IsStopThread) { return(true); } } } // 埋まっていないスレかつ // スレが選択されていれば、現在のスレより新しいスレかつ // 勢いの高いスレを選ぶ var threads2 = ThreadList.Where(info => !info.IsStopThread) .Where(info => !ThreadSelected || int.Parse(BbsInfo.ThreadNo) < int.Parse(info.ThreadNo)) .OrderByDescending(info => info.ThreadSpeed); // 候補スレッドが無ければ終わり if (!threads2.Any()) { return(false); } ChangeThread(threads2.First().ThreadNo); return(true); }
//------------------------------------------------------------- // 概要:次スレ候補を取得する //------------------------------------------------------------- public bool ChangeCandidateThread() { // 埋まっていないスレかつ // スレが選択されていれば、現在のスレより新しいスレかつ // 勢いの高いスレを選ぶ var threads = ThreadList.Where(info => !info.IsStopThread) .Where(info => !ThreadSelected || int.Parse(BbsInfo.ThreadNo) < int.Parse(info.ThreadNo)) .OrderByDescending(info => info.ThreadSpeed); // 候補スレッドが無ければ終わり if (threads.Count() == 0) { return(false); } ChangeThread(threads.First().ThreadNo); return(true); }