Mega Code Archive

 
Categories / C# Book / 04 LINQ
 

0382 Reevaluation and Deferred Execution

A deferred execution query is reevaluated when you reenumerate: using System; using System.Collections; using System.Collections.Generic; using System.Linq; class Program { static void Main() { var numbers = new List<int>() { 1, 2 }; IEnumerable<int> query = numbers.Select(n => n * 10); foreach (int n in query) Console.Write(n + "|"); // 10|20| numbers.Clear(); foreach (int n in query) Console.Write(n + "|"); // <nothing> } } The output: 10|20| We can save the result of a deferred executable operator with operators, such as ToArray or ToList. using System; using System.Collections; using System.Collections.Generic; using System.Linq; class Program { static void Main() { var numbers = new List<int>() { 1, 2 }; List<int> timesTen = numbers .Select(n => n * 10) .ToList(); // Executes immediately into a List<int> numbers.Clear(); Console.WriteLine(timesTen.Count); // Still 2 } } The output: 2