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
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.