Поделиться через


Пример отложенного выполнения

В данном разделе показано влияние отложенного выполнения и отложенного вычисления на запросы LINQ to XML.

Пример

В следующем примере демонстрируется порядок выполнения при использовании метода расширения, в котором применяется отложенное выполнение. В этом примере объявляется массив из трех строк. Затем в нем производится итерация по коллекции, возвращенной ConvertCollectionToUpperCase.

Примечание

В следующем примере используется конструкция yield return языка C#.Так как в Visual Basic 2008 эквивалентной функции нет, этот пример приведен только на C#.

public static class LocalExtensions
{
    public static IEnumerable<string>
      ConvertCollectionToUpperCase(this IEnumerable<string> source)
    {
        foreach (string str in source)
        {
            Console.WriteLine("ToUpper: source {0}", str);
            yield return str.ToUpper();
        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        string[] stringArray = { "abc", "def", "ghi" };

        var q = from str in stringArray.ConvertCollectionToUpperCase()
                select str;

        foreach (string str in q)
            Console.WriteLine("Main: str {0}", str);
    }
}

Этот пример выводит следующие данные.

ToUpper: source abc
Main: str ABC
ToUpper: source def
Main: str DEF
ToUpper: source ghi
Main: str GHI

Обратите внимание, что во время итерации по коллекции, возвращенной ConvertCollectionToUpperCase, происходит получение каждого элемента из исходного массива строк и преобразование символов в верхний регистр до получения следующего элемента из исходного массива строк.

Видно, что весь массив строк не преобразуется в символы верхнего регистра, пока каждый элемент возвращенной коллекции не будет обработан циклом foreach в Main.

Следующие действия

Следующий раздел учебника иллюстрирует объединение запросов в цепочки:

См. также

Основные понятия

Учебник. Объединение запросов в цепочки