Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo mostra como a execução adiada e a avaliação lenta afetam a execução de suas consultas LINQ to XML.
Exemplo: Use a construção yield return
em um método de extensão para adiar a execução.
O exemplo a seguir mostra a ordem de execução ao usar um método de extensão que usa execução adiada. O exemplo declara uma matriz de três cadeias de caracteres. Em seguida, ele itera através da coleção retornada por 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
Este exemplo produz a seguinte saída:
ToUpper: source abc
Main: str ABC
ToUpper: source def
Main: str DEF
ToUpper: source ghi
Main: str GHI
Observe que, ao iterar pela coleção retornada pelo ConvertCollectionToUpperCase
, cada item é recuperado da matriz de cadeia de caracteres de origem e convertido em maiúsculas antes que o próximo item seja recuperado da matriz de cadeia de caracteres de origem.
Você pode ver que toda a matriz de strings não é convertida em maiúsculas antes de cada item da coleção retornada ser processado no loop em foreach
e Main
.