using System.Collections.Generic;
using System.Diagnostics;
public static void Main()
IEnumerable<Item> items = new List<Item>(Enumerable.Range(0,100).Select(a=> new Item(a)));
items = items.OrderBy( x=> new Guid()).ToArray();
Func<Item,bool> filter = x => x.Size == n;
Run("First", () => items.First( filter ));
Run("Where First", () => items.Where( filter ).First());
filter = x => x.Size < n;
Run("First", () => items.First( filter ));
Run("Where First", () => items.Where( filter ).First());
filter = x => x.Size > n;
Run("First", () => items.First( filter ));
Run("Where First", () => items.Where( filter ).First());
public String Name{ get;set; }
public int Size {get;set;}
public static void Run(String title, Func<object> action){
Stopwatch watch = Stopwatch.StartNew();
for(int i=0;i<40000;i++){
Console.WriteLine("{0} milliseconds for {1}", watch.ElapsedMilliseconds, title);