Aracılığıyla paylaş


Ertelenmiş yürütme örneği (LINQ to XML)

Bu makalede, ertelenen yürütme ve gecikmeli değerlendirmenin LINQ to XML sorgularınızın yürütülmesini nasıl etkilediği gösterilmektedir.

Örnek: Yürütmeyi yield return ertelemek için uzantı yönteminde yapısını kullanma

Aşağıdaki örnek, ertelenmiş yürütme kullanan bir uzantı yöntemi kullanılırken yürütme sırasını gösterir. Örnek üç dizeden oluşan bir dizi bildirir. Ardından tarafından ConvertCollectionToUpperCasedöndürülen koleksiyonda yinelenir.

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

Bu örnek aşağıdaki çıkışı oluşturur:

ToUpper: source abc
Main: str ABC
ToUpper: source def
Main: str DEF
ToUpper: source ghi
Main: str GHI

tarafından ConvertCollectionToUpperCasedöndürülen koleksiyonda yinelenirken her öğenin kaynak dize dizisinden alınıp sonraki öğe kaynak dize dizisinden alınmadan önce büyük harfe dönüştürüldüğüne dikkat edin.

Döndürülen koleksiyondaki her öğe içindeki döngüde Mainişlenmeden önce dize dizisinin tamamının foreach büyük harfe dönüştürüldüğünü görebilirsiniz.

Ayrıca bkz.