return 与 yield return 的区别

昨晚虽睡得不怎么样,今天居然有点儿“顿悟”的感觉。

yield似乎在枚举器里看过,但没什么印象了,各种搜索一通,很多是转的,还长篇大论的很多文字,不知怎么有不想看下去的感觉,喝了杯咖啡,抬头看着屏幕,突然觉得我也顿悟了:

不同点总结如下:

  1) 返回值类型不同:

      a)   return 返回其后面表达式的值可以是任何类型,暂称其为T类型;

      b)   而yield return 返回IEnumerable<T>类型,总是个可枚举的对象,yield return
后面的表达式为T类型。

        那么如何构成可枚举对象呢?就看yield return
语句执行多少次,执行多少次最终的可枚举对象就有多少个元素,怎么执行多少次我想不用我说了,比如循环,甚至简单的复制几遍。要说明的是每个yield return
后的表达式应该是相同或相兼容的类型,都为T类型。

  2)程序控制流程不同:

      a)  return 语句使方法返回,后面再有语句都不执行了。

b)  yield return 则不会使方法返回,继续执行后面的语句,只是计算记录最终返回的可枚举对象的一个元素值。

以上,是个人观点和总结,如有疏漏错误之处,欢迎批评指正。

时间: 2024-10-10 04:51:30

return 与 yield return 的区别的相关文章

yield return 和 yield break

//yield return 返回类型必须为 IEnumerable.IEnumerable<T>.IEnumerator 或 IEnumerator<T>. static IEnumerator<int> yieldTest() //yield return 返回IEnumerator  { yield return 1; yield return 4; if (true)//如果为True 输出 1,4;//如果是False 输出 1,4,3,2 { yield b

yield return简单示例

List<int> list = new List<int>() { 1,2,3,4 }; // 需求:返回所有大于n的数 // 方法1(不使用yield return) IEnumerable<int> WithoutYield(List<int> list, int n) { List<int> result = new List<int>(); foreach (int i in list) { if (i > n) {

yield return,yield break

转自, http://www.cnblogs.com/kingcat/archive/2012/07/11/2585943.html yield return 表示在迭代中下一个迭代时返回的数据,除此之外还有yield break, 其表示跳出迭代,为了理解二者的区别我们看下面的例子 class A : IEnumerable{    private int[] array = new int[10]; public IEnumerator GetEnumerator()    {       

IEnumerator/ IEnumerable/ yield return/ StartCoroutine 详解

IEnumerator/ IEnumerable public interface IEnumerable { IEnumerator GetEnumerator(); } public interface IEnumerator { bool MoveNext(); void Reset(); Object Current { get; } } 在两者的使用上,有下面几点需要注意 1.一个Collection要支持foreach方式的遍历,必须实现IEnumerable接口(亦即,必须以某种方

C# yield return用法

本文实例讲述了C#中yield return用法,并且对比了使用yield return与不使用yield return的情况,以便读者更好的进行理解.具体如下: yield关键字用于遍历循环中,yield return用于返回IEnumerable<T>,yield break用于终止循环遍历. 有这样的一个int类型的集合: ? 1 2 3 4 static List<int> GetInitialData() {   return new List<int>(){

C#中的yield return与Unity中的Coroutine(协程)(下)

Unity中的Coroutine(协程) 估计熟悉Unity的人看过或者用过StartCoroutine() 假设我们在场景中有一个UGUI组件, Image: 将以下代码绑定到Image 1 using UnityEngine; 2 using System.Collections; 3 using System.Threading; 4 using UnityEngine.UI; 5 6 public class CoroutineDemo : MonoBehaviour { 7 8 //

造轮子_C#中yield return用法分析

厂址: http://www.jb51.net/article/54810.htm static List<int> GetInitialData() {   return new List<int>(){1,2,3,4}; } 打印出所有值大于2的元素 不使用yield return的实现 static IEnumerable<int> FilterWithoutYield() {   List<int> result = new List<int&

js中return、return true、return false的区别

js中return.return true.return false;区别 一.返回控制与函数结果, 语法为:return 表达式; 语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果  二.返回控制, 无函数结果,语法为:return;  在大多数情况下,为事件处理函数返回false,可以防止默认的事件行为.例如,默认情况下点击一个<a>元素,页面会跳转到该元素href属性指定的页.    Return False 就相当于终止符,Return True 就相当于执行符.    

C#基础复习IEnumerable(和 yield return的使用滴呀 )

IEnumerable 真是基础中的基础,然而..... 我们直接来看看这个接口的实现吧: 它是一个公开枚举数,该枚举数支持在非泛型集合上进行简单的迭代.换句话说,对于所有数组的遍历,都来自IEnumerable,那么我们就可以利用这个特性,来定义一个能够遍历xxxxxx的通用方法 先看我们的经典实例1: using System; using System.Collections; using System.Collections.Generic; using System.Linq; usi