Beispiel für verzögerte Ausführung (LINQ to XML)
In diesem Thema wird gezeigt, wie sich verzögerte Ausführung und verzögerte Auswertung auf die Ausführung Ihrer LINQ to XML-Abfragen auswirken.
Beispiel: Verwenden des yield return
-Konstrukts in einer Erweiterungsmethode zum Verzögern der Ausführung
Im folgenden Beispiel wird gezeigt, in welcher Reihenfolge die Ausführung erfolgt, wenn eine Erweiterungsmethode verwendet wird, die mit verzögerter Ausführung arbeitet. Das Beispiel deklariert ein Array aus drei Zeichenfolgen. Anschließend durchläuft es die von ConvertCollectionToUpperCase
zurückgegebene Auflistung.
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);
}
}
Imports System.Runtime.CompilerServices
Module Module1
<Extension()>
Private Iterator Function ConvertCollectionToUpperCase(
ByVal source As IEnumerable(Of String)) _
As IEnumerable(Of String)
For Each str As String In source
Console.WriteLine("ToUpper: source {0}", str)
Yield str.ToUpper()
Next
End Function
Sub Main()
Dim stringArray = New String() {"abc", "def", "ghi"}
Dim q = From str In stringArray.ConvertCollectionToUpperCase()
Select str
For Each Str As String In q
Console.WriteLine("Main: str {0}", Str)
Next
End Sub
End Module
Dieses Beispiel erzeugt die folgende Ausgabe:
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.
Wie Sie sehen, wird das gesamte Array von Zeichenfolgen erst dann in Großbuchstaben konvertiert, nachdem jedes Element in der zurückgegebenen Auflistung in der foreach
-Schleife in Main
verarbeitet wurde.