using System.Collections.Generic;
class IntPair(int x, int y)
public static class MyExtensions
public static IEnumerable<T> Scan<T>(this IEnumerable<T> collection, Func<T, int> accessor, Func<T, bool> predicate, Func<T, int, T> result)
foreach (var element in collection)
yield return result(element, total += accessor(element));
public static void Main()
var result = values.Scan(elem => elem.Y, elem => elem.X != 3, (elem, tempResult) => { elem.Y = tempResult; return elem; });
Console.WriteLine($"[\n\t{string.Join("\n\t", result.Select(elem => $"X: {elem.X} Y: {elem.Y}"))}\n]");