延迟执行示例

本主题演示延迟执行和迟缓计算如何影响 LINQ to XML 查询的执行。

示例

下面的示例演示使用采用延迟执行的扩展方法时的执行顺序。 此示例声明一个由三个字符串组成的数组。 然后,循环访问 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 循环中处理所返回集合的每一项之后,字符串数组才会完全转换为大写形式。

后续步骤

本教程下一主题演示如何将查询链接到一起:

请参见

概念

教程:将查询链接在一起