Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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 yield return
-constructie in een extensiemethode om de 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 array van drie tekenreeksen gedeclareerd. Er wordt dan door de verzameling gelopen die wordt geretourneerd door 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);
}
}
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
In dit voorbeeld wordt de volgende uitvoer gegenereerd:
ToUpper: source abc
Main: str ABC
ToUpper: source def
Main: str DEF
ToUpper: source ghi
Main: str GHI
Merk op dat wanneer u de verzameling doorloopt die door ConvertCollectionToUpperCase
wordt geretourneerd, elk item uit de bronreeksmatrix wordt opgehaald en naar hoofdletters omgezet voordat het volgende item uit de bronreeksmatrix wordt opgehaald.
U kunt zien dat de hele array van tekenreeksen niet naar hoofdletters wordt omgezet voordat elk item in de geretourneerde verzameling wordt verwerkt in de foreach
lus in Main
.