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

转载于:https://www.cnblogs.com/Finding2013/archive/2013/04/24/3040604.html

yield return 和 Func相关推荐

  1. unity update 协程_Unity协程,停止协程及yield return使用_019

    public void Start() { //开启协程 Coroutine testCoroutine = StartCoroutine(Test()); //停止指定协程 StopCoroutin ...

  2. Unity中协程的yield return

    记录Unity中对于协程常用的一些操作 不管是对于网络请求或加载资源时以及一些相对来说比较耗费时间的运算时,我们不希望会全部写在Update中来占用大量主线程的资源. 协程 : IEnumerator ...

  3. Unity 协程 yield return的使用

    public void Start(){//开启协程Coroutine testCoroutine = StartCoroutine(Test());//停止指定协程StopCoroutine(tes ...

  4. yield学习续:yield return迭代块在Unity3D中的应用——协程

    必读好文推荐: Unity协程(Coroutine)原理深入剖析 Unity协程(Coroutine)原理深入剖析再续 上面的文章说得太透彻,所以这里就记一下自己的学习笔记了. 首先要说明的是,协程并 ...

  5. yield return的理解

    一直在实际开发中都有用到yield return,但也一直只停留在"用"的层面上,可谓一知半解.今天下班回来自己查证思考了半天,本着自己的原则一切从简提炼了一下几点(正确与否有待进 ...

  6. C#中,什么时候用yield return

    yield关键字用于遍历循环中,yield return用于返回IEnumerable<T>,yield break用于终止循环遍历. 有这样的一个int类型的集合: static Lis ...

  7. //yield return用于无缝实现迭代模式。

    代码  public class YieldReturn     {         //yield return用于无缝实现迭代模式.             string[] strArr;    ...

  8. yield return关键字怎么使用?

    在迭代器块中用于向枚举数对象提供值或发出迭代结束信号.它的形式为下列之一: 复制代码 yield return <expression>;yield break; 备注计算表达式并以枚举数 ...

  9. 可惜Java中没有yield return

    项目中一个消息推送需求,推送的用户数几百万,用户清单很简单就是一个txt文件,是由hadoop计算出来的.格式大概如下: uid caller 123456 12345678901 789101 12 ...

  10. C#中yield return用法

    转载:http://www.jb51.net/article/54810.htm http://www.cnblogs.com/HunterWei/archive/2012/06/13/csharpy ...

最新文章

  1. Python异常处理体系简介(1)
  2. 围观|第一代云原生企业米哈游如何让想象发生?
  3. Cisco路由器基础安全配置---特权模式和VTY线路密码
  4. 华为怎么升级Android11,华为EMUI 11/安卓11升级名单曝光 快来看看你的手机是否支持...
  5. centos 安装tomcat_简单介绍Linux配置mysql,tomcat,Nginx 开机自启动的几个方式
  6. java servlet 获取mac地址_Java开发网 - 请教大家几个关于servlet取ip和mac地址的问题~~!...
  7. java集合框架的实现
  8. mysql 主命令总结
  9. 在ASP.NET 2.0中配置 AspNetSqlMembershipProvider(AspNetSqlProvider )
  10. ios android 逆向 对比,iOS逆向开发--APP重签名
  11. Carplay车载语音通讯测试(Vehicle Communication Terminals Test)
  12. 使用Picasso加载图片的内存优化实践
  13. 对于开发软件的NABCD分析
  14. 某缓存系统采用LRU淘汰算法,假定缓存容量为4,并且初始为空,那么在顺序访问以下数据项的时候,1、5、1、3、5、2、4、1、2,出现缓存直接命中的次数是(),最后缓存中即将准备淘汰的数据项是()
  15. python变量、类型及转换
  16. 微信组件:微信转账查询
  17. 学机器视觉好找工作吗?人工智能机器视觉方向怎么样?
  18. 字节面试归来,四面竟然都考了算法!
  19. [推荐 10 个让你事半功倍的网站]
  20. 写策划案需要了解策划案的内容以及撰写原则

热门文章

  1. Django框架(二)---- 常用命令
  2. 转【es中数据节点和主机】
  3. javaweb使用 window.location.href 传中文参数 乱码问题
  4. 康托展开、康托逆展开原理
  5. 项目--Asp.net全局变量的设置和读(web.config 和 Gloab)
  6. Hadoop 2.2.0 在centos6.2 64位下的安装--分布式模式
  7. Interesting Finds: 2008.01.04
  8. 十四 关于interrupt, interrupted, isInterrupted
  9. MyEclipse 保护色设置
  10. C# 设计模式巩固笔记 - 建造者模式