using System; using System.Linq; using System.Collections.Generic; public static class Test { public static IEnumerable Last(this IEnumerable source, int n) { using(var it = source.GetEnumerator()) { var buffer = new T[n]; var i = 0; while (it.MoveNext()) buffer[(i++) % n] = it.Current; var len = Math.Min(n, i); for (int j = i - len; j < i; j++) yield return buffer[ (j + n) % n]; } } public static void Main() { var seq = new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; foreach (var n in seq.Last(5)) Console.Write(string.Format("{0} ", n)); } }