zoukankan      html  css  js  c++  java
  • yield return 和 Func

    yield return 用以生成IEnumerable类型的结果集,如下例所示,当第15行之行时,函数MyWhere并不会执行,而当第18行之行时会从第5行开始执行,在找到第一个偶数2时,函数MyWhere返回,执行第18行打印数字2,然后再调用第5行找到第二个偶数4,MyWhere又返回,继续执行第18行打印数字4。当执行到第22行时,函数MyWhere又会重新一次一次的执行。

    MyWhere是为IEnumerable<T>类型定义的一个扩展方法,比如List<int>就是实现了IEnumerable的泛型方法,即可自动调用MyWhere这个扩展方法。

    Func<T,bool> predicate表示predicate是一个可以指向一个有一个类型为T的参数且返回bool的匿名方法

     1 static class MyExtendClass
     2     {
     3         public static IEnumerable<T> MyWhere<T>(this IEnumerable<T> source, Func<T, bool> predicate)
     4         {            
     5             foreach (T obj in source)
     6                 if (predicate(obj))
     7                     yield return obj;
     8         }
     9     }
    10     class Program
    11     {        
    12         static void Main(string[] args)
    13         {
    14             List<int> myList = new List<int>() { 1, 2, 3, 4, 5, 6 };
    15             var queryint= myList.MyWhere(x => x % 2 == 0);
    16             foreach (var item in queryint)
    17             {
    18                 Console.Write(item);
    19             }
    20             foreach (var item in queryint)
    21             {
    22                 Console.Write(item);
    23             }

    Func在.net中定义如下:

    // 摘要:
        //     封装一个具有一个参数并返回 TResult 参数指定的类型值的方法。
        //
        // 参数:
        //   arg:
        //     此委托封装的方法的参数。
        //
        // 类型参数:
        //   T:
        //     此委托封装的方法的参数类型。
        //
        //   TResult:
        //     此委托封装的方法的返回值类型。
        //
        // 返回结果:
        //     此委托封装的方法的返回值。
        [TypeForwardedFrom("System.Core, Version=3.5.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089")]
        public delegate TResult Func<in T, out TResult>(T arg);
  • 相关阅读:
    动态数据源切换
    Disconf实践指南:改造篇
    Disconf实践指南:使用篇
    Disconf实践指南:安装篇
    执行Git命令时出现各种 SSL certificate problem 的解决办法
    linux rz 乱码
    分布式配置项管理-开源方案预研究
    mac下mysql5.7.18修改root密码
    git 版本回滚
    关于@Autowired使用注意点
  • 原文地址:https://www.cnblogs.com/Finding2013/p/3040604.html
Copyright © 2011-2022 走看看