Contoh eksekusi yang ditangguhkan (LINQ ke XML)
Artikel ini memperlihatkan bagaimana eksekusi yang ditangguhkan dan evaluasi malas memengaruhi eksekusi kueri LINQ ke XML Anda.
Contoh: Gunakan konstruksi yield return
dalam metode ekstensi untuk menangguhkan eksekusi
Contoh berikut menunjukkan urutan eksekusi saat menggunakan metode ekstensi yang menggunakan eksekusi yang ditangguhkan. Contoh mendeklarasikan array dari tiga string. Kemudian melakukan iterasi melalui kumpulan yang dikembalikan oleh 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
Contoh ini menghasilkan output berikut:
ToUpper: source abc
Main: str ABC
ToUpper: source def
Main: str DEF
ToUpper: source ghi
Main: str GHI
Perhatikan bahwa saat melakukan iterasi melalui koleksi yang dikembalikan oleh ConvertCollectionToUpperCase
, setiap item diambil dari array string sumber dan dikonversi ke huruf besar sebelum item berikutnya diambil dari array string sumber.
Anda dapat melihat bahwa seluruh array string tidak dikonversi ke huruf besar sebelum setiap item dalam kumpulan yang dikembalikan diproses dalam perulangan foreach
di Main
.
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk