using System.Collections.Generic;
using System.Diagnostics;
public static void Main() {
var enumerable = Enumerable.Range( 0, 100000 );
Console.WriteLine( "Takelast" );
Console.WriteLine( "Takelast2" );
private static void takelast( IEnumerable<int> enumerable ) {
var stop = Stopwatch.StartNew();
var last3 = enumerable.TakeLast( 10 );
Console.WriteLine( "Took: " + stop.ElapsedTicks );
Console.WriteLine( "Last: " + string.Join( ", ", last3 ) );
private static void takelast2( IEnumerable<int> enumerable ) {
var stop = Stopwatch.StartNew();
var last3 = enumerable.TakeLast2( 10 );
Console.WriteLine( "Took: " + stop.ElapsedTicks );
Console.WriteLine( "Last: " + string.Join( ", ", last3 ) );
public static class Extensions {
public static IEnumerable<T> TakeLast<T>( this IEnumerable<T> c, int n ) {
return c.Reverse().Take( n ).Reverse();
public static IEnumerable<T> TakeLast2<T>( this IEnumerable<T> c, int n ) {
return c.Skip( count - n );