private static Option <T[]> TakeExactly <T>(IEnumerable <T> source, int count, Option.ErrorHelper returnNoneOrThrow) { var xs = source.Take(count + 1).ToArray(); if (xs.Length != count) { return(returnNoneOrThrow("Expected " + count + " items, but got " + (xs.Length > count ? " more." : xs.Length + " items."))); } return(Option.GetSome(xs)); }
private static Option <Tuple <T, T, T, T, T> > TakeExactly5_ <T>(this IEnumerable <T> source, Option.ErrorHelper returnNoneOrThrow) { return(TakeExactly(source, 5, returnNoneOrThrow).Transform(xs => Tuple.Create(xs[0], xs[1], xs[2], xs[3], xs[4]))); }