Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo illustra come l'esecuzione posticipata e la valutazione differita influiscono sull'esecuzione delle query LINQ to XML.
Esempio: usare il costrutto yield return in un metodo di estensione per rinviare l'esecuzione
Nell'esempio seguente viene illustrato l'ordine di esecuzione quando si usa un metodo di estensione che usa l'esecuzione posticipata. Nell'esempio viene dichiarata una matrice di tre stringhe. Scorre quindi la raccolta restituita da 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 questo esempio viene generato l'output seguente:
ToUpper: source abc
Main: str ABC
ToUpper: source def
Main: str DEF
ToUpper: source ghi
Main: str GHI
Si noti che durante l'iterazione della raccolta restituita da ConvertCollectionToUpperCase, ogni elemento viene recuperato dalla matrice di stringhe di origine e convertito in lettere maiuscole prima che l'elemento successivo venga recuperato dalla matrice di stringhe di origine.
È possibile notare che l'intero array di stringhe non viene convertito in maiuscolo prima che ogni elemento della raccolta restituita venga elaborato nel foreach loop in Main.