fork download
  1. using System;
  2. using System.Linq;
  3. using System.Collections.Generic;
  4.  
  5. public class Test
  6. {
  7. private static bool veryExpensiveMethod(int number)
  8. {
  9. Console.WriteLine("veryExpensiveMethod called");
  10. return true;
  11. }
  12.  
  13. public static void Main()
  14. {
  15. var numbers = new []{1,2,3,4,5};
  16. IEnumerable<int> nums = numbers.Where(i=> veryExpensiveMethod(i));
  17. // deferred
  18. int count = nums.Count();
  19. Console.WriteLine("Numbers: {0}", count);
  20. // following will execute veryExpensiveMethod again 5 times(because 5 elements are in the "filtered" sequence)
  21. nums = nums.ToList();
  22. // not deferred, using the Count property of List<T>
  23. count = nums.Count();
  24. Console.WriteLine("Numbers: {0}", count);
  25. // following Count() will not call 'veryExpensiveMethod' implicitely because nums is now a List<T>
  26. count = nums.Count();
  27. count = nums.Count();
  28. count = nums.Count();
  29. }
  30. }
Success #stdin #stdout 0.03s 37056KB
stdin
Standard input is empty
stdout
veryExpensiveMethod called
veryExpensiveMethod called
veryExpensiveMethod called
veryExpensiveMethod called
veryExpensiveMethod called
Numbers: 5
veryExpensiveMethod called
veryExpensiveMethod called
veryExpensiveMethod called
veryExpensiveMethod called
veryExpensiveMethod called
Numbers: 5