次の方法で共有


遅延実行の例

このトピックでは、遅延実行とレイジー評価が LINQ to XML クエリの実行にどのように影響するかについて説明します。

遅延実行を利用する拡張メソッドの使用時における実行順序の例を次に示します。 この例では、3 つの文字列の配列を宣言します。 次に、ConvertCollectionToUpperCase によって返されるコレクションを反復処理します。

注意

次の例では、C# の yield return 構造を使用します。 Visual Basic 2008 には類似した機能がないため、この例は C# のみを対象としています。

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);
    }
}

この例では次の出力が生成されます。

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

ConvertCollectionToUpperCase によって返されるコレクションの反復処理時、各アイテムはソース文字列の配列から取得され、次のアイテムがソース文字列の配列から取得される前に大文字に変換されることに注意してください。

返されるコレクションの各アイテムが Main の foreach ループで処理されるまで、文字列の配列全体は大文字に変換されないことを確認できます。

次の手順

このチュートリアルの次のトピックでは、クエリの連結について説明します。

参照

概念

チュートリアル : クエリの連結