Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek ukazuje, jak odložené spuštění a opožděné vyhodnocení ovlivňuje provádění dotazů LINQ to XML.
Příklad: Použití konstruktoru yield return v metodě rozšíření k odložení provádění
Následující příklad ukazuje pořadí provádění při použití rozšiřující metody, která používá odložené spuštění. Příklad definuje pole sestávající ze tří řetězců. Pak iteruje kolekcí vrácenou 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
Tento příklad vytvoří následující výstup:
ToUpper: source abc
Main: str ABC
ToUpper: source def
Main: str DEF
ToUpper: source ghi
Main: str GHI
Všimněte si, že při iteraci kolekcí vrácenou ConvertCollectionToUpperCase je každá položka načtena ze zdrojového pole řetězců a převedena na velká písmena, než se načte další položka ze zdrojového pole řetězců.
Můžete vidět, že celé pole řetězců není převedeno na velká písmena před zpracováním každé položky ve vrácené kolekci ve smyčce foreach v Main.