Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird gezeigt, wie sich verzögerte Ausführung und faule Auswertung auf die Ausführung Ihrer LINQ to XML-Abfragen auswirken.
Beispiel: Verwenden des yield return-Konstrukts in einer Erweiterungsmethode, um die Ausführung zu verzögern.
Das folgende Beispiel zeigt die Reihenfolge der Ausführung bei Verwendung einer Erweiterungsmethode, die verzögerte Ausführung verwendet. Im Beispiel wird ein Array mit drei Zeichenfolgen deklariert. Anschließend iteriert es durch die Sammlung, die von ConvertCollectionToUpperCase zurückgegeben wird.
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 jedes Element aus dem Quellzeichenfolgenarray abgerufen und in Großbuchstaben konvertiert wird, bevor das nächste Element aus dem Quellzeichenfolgenarray abgerufen wird.
Sie können sehen, dass das gesamte Array von Zeichenfolgen nicht in Großbuchstaben konvertiert wird, bevor jedes Element in der zurückgegebenen Auflistung in der foreach-Schleife in Main verarbeitet wird.