Beispiel für eine verzögerte Ausführung (C#)Deferred Execution Example (C#)

In diesem Thema wird gezeigt, wie sich die verzögerte Ausführung (Deferred Execution) und die verzögerte Auswertung (Lazy Evaluation) auf die Ausführung Ihrer LINQ to XML-Abfragen auswirken.This topic shows how deferred execution and lazy evaluation affect the execution of your LINQ to XML queries.

BeispielExample

Im folgenden Beispiel wird gezeigt, in welcher Reihenfolge die Ausführung erfolgt, wenn eine Erweiterungsmethode verwendet wird, die mit verzögerter Ausführung arbeitet.The following example shows the order of execution when using an extension method that uses deferred execution. Das Beispiel deklariert ein Array aus drei Zeichenfolgen.The example declares an array of three strings. Anschließend durchläuft es die von ConvertCollectionToUpperCase zurückgegebene Auflistung.It then iterates through the collection returned by ConvertCollectionToUpperCase.

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

Dieses Beispiel erzeugt die folgende Ausgabe:This example produces the following output:

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

Beachten Sie, dass beim Durchlaufen der von ConvertCollectionToUpperCase zurückgegebenen Auflistung erst jedes Element aus dem Quellzeichenfolgenarray abgerufen und in Großbuchstaben umgewandelt wird, bevor das nächste Element aus dem Quellzeichenfolgenarray abgerufen wird.Notice that when iterating through the collection returned by ConvertCollectionToUpperCase, each item is retrieved from the source string array and converted to uppercase before the next item is retrieved from the source string array.

Wie Sie sehen, wird das gesamte Array von Zeichenfolgen erst dann in Großbuchstaben umgewandelt, wenn jedes Element in der zurückgegebenen Auflistung in der foreach-Schleife in Main verarbeitet wurde.You can see that the entire array of strings is not converted to uppercase before each item in the returned collection is processed in the foreach loop in Main.

Im nächsten Thema dieses Lernprogramms wird das Verketten von Abfragen gezeigt:The next topic in this tutorial illustrates chaining queries together:

Siehe auchSee Also

Tutorial: Verketten von Abfragen (C#)Tutorial: Chaining Queries Together (C#)