private static int[] TakeWhile(int[] source, ref int position, Func<int, bool> filter) { var result = new List<int>(); while (position < source.Length && filter(source[position])) { result.Add(source[position]); position++; } return result.ToArray(); }