using System.Collections.Generic;
using System.Diagnostics;
public static void Main()
IEnumerable<Item> items = new List<Item>(Enumerable.Range(0,1000).Select(a=> new Item(a)));
items = items.OrderBy( x=> new Guid()).ToList().ToArray();
Func<Item,bool> filter = x => x.Size == 500;
Run("First", () => items.First( filter ));
Run("Where First", () => items.Where( filter ).First());
filter = x => x.Size < 500;
Run("First", () => items.First( filter ));
Run("Where First", () => items.Where( filter ).First());
filter = x => x.Size > 500;
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<10000;i++){
Console.WriteLine("{0} milliseconds for {1}", watch.ElapsedMilliseconds, title);