/// <summary>現在位置より後方の、条件を満たす位置へ移動する。</summary> /// <typeparam name="T">要素の型</typeparam> /// <param name="scroller">対象インスタンス</param> /// <param name="predicate">条件</param> public static IElementScroller <T> Next <T>(this IElementScroller <T> scroller, Predicate <T> predicate) { var cnt = scroller.nextSequence() .Select((v, i) => new { Value = v, Index = i }) .First(x => predicate(x.Value)) .Index + 1; return(scroller.Next(cnt)); }
/// <summary>現在の位置の次に要素が存在するかどうかを示す値を取得する。</summary> /// <typeparam name="T">要素の型</typeparam> /// <param name="scroller">対象インスタンス</param> /// <param name="count">距離</param> public static bool HasNext <T>(this IElementScroller <T> scroller, int count) { if (count <= 0) { throw new ArgumentOutOfRangeException("count"); } count = count - 1; return(scroller.nextSequence().Skip(count).Any()); }
/// <summary>現在の位置の後方に、指定した条件を満たす要素が存在するかどうかを示す値を取得する。</summary> /// <typeparam name="T">要素の型</typeparam> /// <param name="scroller">対象インスタンス</param> /// <param name="predicate">条件を表す関数</param> public static bool HasNext <T>(this IElementScroller <T> scroller, Predicate <T> predicate) { return(scroller.nextSequence().Any(x => predicate(x))); }