Lezen in het Engels

Delen via


Voorbeeld van uitgestelde uitvoering (LINQ naar XML)

In dit artikel wordt beschreven hoe uitgestelde uitvoering en luie evaluatie van invloed zijn op de uitvoering van uw LINQ naar XML-query's.

Voorbeeld: Gebruik de constructie in een extensiemethode om de yield return uitvoering uit te stellen

In het volgende voorbeeld ziet u de volgorde van de uitvoering wanneer u een extensiemethode gebruikt die gebruikmaakt van de uitgestelde uitvoering. In het voorbeeld wordt een matrix van drie tekenreeksen declareren. Vervolgens wordt de verzameling herhaald die wordt geretourneerd door ConvertCollectionToUpperCase.

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);
    }
}

In dit voorbeeld wordt de volgende uitvoer gegenereerd:

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

U ziet dat bij het doorlopen van de verzameling die door ConvertCollectionToUpperCasewordt geretourneerd, elk item wordt opgehaald uit de brontekenreeksmatrix en wordt geconverteerd naar hoofdletters voordat het volgende item wordt opgehaald uit de bronreeksmatrix.

U kunt zien dat de hele matrix met tekenreeksen niet wordt geconverteerd naar hoofdletters voordat elk item in de geretourneerde verzameling in de lus in Mainde foreach lus wordt verwerkt.

Zie ook