欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > C#迭代器方法和yield用法

C#迭代器方法和yield用法

2024/10/25 11:30:11 来源:https://blog.csdn.net/ellis1970/article/details/142113145  浏览:    关键词:C#迭代器方法和yield用法

一.迭代器方法介绍

可使用foreach循环进行遍历的方法,称为迭代器方法。

迭代器方法使用yield return语句返回元素。 到达yield return语句时,会记住当前在代码中的位置。 下次调用迭代器函数时,将从该位置开始执行。换言之,如果语句中出现yield关键字,则意味着它出现的方法是迭代器方法。

在以下示例中,foreach 循环的首次迭代使 SomeNumbers 迭代器方法执行,直至到达第一个 yield return 语句。 此迭代返回的值为 3,并保留当前在迭代器方法中的位置。 在循环的下次迭代中,迭代器方法的执行将从其暂停的位置继续,直至到达 yield return 语句后才会停止。 此迭代返回的值为 5,并再次保留当前在迭代器方法中的位置。 到达迭代器方法的结尾时,循环完成。

    class MainClass{public static IEnumerable SomeNumbers(){yield return 3;yield return 5;yield return 8;}static void Main(){foreach (int number in SomeNumbers()){Console.Write(number.ToString() + " ");}}}/* Output:3 5 8*/

迭代器方法的返回类型必须为IEnumerable,IEnumerator,IEnumerable<T>或IEnumerator<T>。可以使用yield break语句来终止迭代。

在迭代器方法中除了yield return外,不允许出现普通的return语句。

二.通过迭代器方法快速创建迭代器

在下例中,如果不使用yield return语法,则需创建一个类实现IEnumerator接口,实现MoveNext、Current和reset方法。可见yield是一种语法糖,简化了创建迭代器的复杂性。

    public class DaysOfTheWeek : IEnumerable{private string[] days = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };public IEnumerator GetEnumerator(){for (int index = 0; index < days.Length; index++){// Yield each day of the week.yield return days[index];}}}class MainClass{static void Main(){DaysOfTheWeek days = new DaysOfTheWeek();foreach (string day in days){Console.Write(day + " ");}// Output: Sun Mon Tue Wed Thu Fri SatConsole.ReadKey();}}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com