一、C#中yield关键字用于遍历循环中,yield语句的两种形式

yield return用于返回IEnumerable<T>,

yield break用于终止循环遍历。

 

二、yield return的用法

使用yield return获取集合,并遍历。

 
C# 代码   复制
C#中的yieldC#中的yield
    class Program
C#中的yield{ C#中的yieldC#中的yield public static Random r = new Random(); C#中的yieldC#中的yieldC#中的yield static IEnumerable<int> GetList(int count) C#中的yield{ C#中的yieldC#中的yieldC#中的yield for (int i = 0; i < count; i++) C#中的yield{ C#中的yieldC#中的yield yield return r.Next(10); C#中的yieldC#中的yield } C#中的yieldC#中的yield } C#中的yieldC#中的yieldC#中的yield static void Main(string[] args) C#中的yield{ C#中的yieldC#中的yield foreach(int item in GetList(5)) C#中的yieldC#中的yield Console.WriteLine(item); C#中的yieldC#中的yield Console.ReadKey(); C#中的yieldC#中的yield } C#中的yieldC#中的yield } C#中的yield

 

生成项目,并用反编译可执行文件。查看GetList方法,发现该方法返回的是一个GetList类的实例。原来yield return是"语法糖",其本质是生成了一个GetList的实例。

 

C#中的yield

 

那GetList实例是什么呢?点击反编译工具中<GetList>链接查看

 

C#中的yield

 

分析代码后可以知道

1、原来GetList类实现了IEnumerable和IEnumerator的泛型、非泛型接口 2、yield return返回的集合之所以能被迭代、遍历,是因为GetList内部有迭代器 3、yield return之所以能实现"按需供给",是因为GetList内部有一个_state字段记录这上次的状态 

 

三、yield break的用法

使用yield break可以在获取集合的时候,当符合某种条件就终止获取集合。

 
C# 代码   复制
C#中的yieldC#中的yield
    class Program
C#中的yield{ C#中的yieldC#中的yield static Random rand = new Random(); C#中的yieldC#中的yieldC#中的yield static IEnumerable<int> GetList() C#中的yield{ C#中的yieldC#中的yield while (true) C#中的yield{ C#中的yieldC#中的yield int temp = rand.Next(100); C#中的yieldC#中的yield if (temp%10 == 0) C#中的yield{ C#中的yieldC#中的yield yield break; C#中的yieldC#中的yield } C#中的yieldC#中的yield yield return temp; C#中的yieldC#中的yield } C#中的yieldC#中的yield } C#中的yieldC#中的yieldC#中的yield static void Main(string[] args) C#中的yield{ C#中的yieldC#中的yield foreach (int item in GetList()) C#中的yield{ C#中的yieldC#中的yield Console.WriteLine(item); C#中的yieldC#中的yield } C#中的yieldC#中的yield Console.ReadKey(); C#中的yieldC#中的yield } C#中的yieldC#中的yield } C#中的yieldC#中的yield

 

四、C#中yield关键字的总结

 

相关文章: