C#使用LINQ中Enumerable类方法的延迟与立即执行的控制

2019-12-30 11:42:49王旭

程序的运行结果如下:

C#使用LINQ中Enumerable类方法的延迟与立即执行的控制

15.OfType筛选指定类型的元素

16.Cast类型转换

17.AsEnumerable有些数据源类型不支持Enumerable的部分查询关键字,需要转换下,譬如IQueryable


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace Cast_OfType_AsEnumerable
{
  /// <summary>
  /// DebugLZQ
  /// http://www.easck.com/DebugLZQ
  /// </summary>
  class Program
  {
    static void Main(string[] args)
    {
      ArrayList names = new ArrayList();
      names.Add("DebugLZQ");
      names.Add("Jerry");
      names.Add(100);
      names.Add(new {Name="LZQ",Age=26});
      names.Add(new Stack());
      //15.OfType筛选指定类型的元素
      var takenames = names.OfType<string>();

      //16.Cast类型转换
      var takenames2 = names.OfType<string>().Cast<string>();

      //17.AsEnumerable
      var takenames3 = takenames2.AsEnumerable();

      foreach (var name in takenames3)
      {
        Console.Write("{0} ",name);
      }
      Console.ReadKey(false);

    }
  }
}

程序运行结果如下:

C#使用LINQ中Enumerable类方法的延迟与立即执行的控制

延时执行,顾名思义就是不是立即执行,即不是在查询语句定义的时候执行,而是在处理结果集(如遍历)的时候执行,在Enumerable类方法成员中,除了本节总结的这常用的17个外,前面博文---LINQ基本子句 中总结的8个基本子句也都是延时执行的。注意延时执行的查询程序的执行流程。

立即执行的Enumerable类方法
下面我们再来总结常用的立即执行的Enumerable类方法和它们的常用用法。同样,为了便于理解和记忆,进行一下分组:

1.ToArray序列转换成数组

2.ToList序列转换成List<T>