我是靠谱客的博主 顺心夕阳,最近开发中收集的这篇文章主要介绍c#入门-迭代器foreach循环可迭代迭代器,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

foreach循环

例如字符串,数组等包含不确定个数的元素的类型,可以使用foreach循环遍历元素。

int[] p = { 1, 2, 3, 4, 5 };
string s = "hello";
foreach (var item in p)
{
	Console.WriteLine(item);
}
foreach (var item in s)
{
	Console.WriteLine(item);
}

可迭代

这是因为这些类型实现了一个方法。
你可以实现接口IEnumerable或他的泛型版本。
它里面的方法只有一个作用:获取一个迭代器。

但这个接口只是方便你创建方法,
实际上只需要有同名的的无参方法就行了。
甚至扩展方法都行。

static class Extend  
{
	public static IEnumerator<bool> GetEnumerator(this byte b) {
		for (int i = 0; i < 8; i++)
		{
			yield return (b & 1) == 1;
			b >>= 1;
		}
	}
}
byte b = 56;
foreach (var item in b)
{
	Console.WriteLine(item);
} 

迭代器

接口IEnumerable的意思是这个类型是可以迭代的。
而它里面的方法返回的类型IEnumerator的意思是迭代器。

在返回类型为IEnumerator或IEnumerable的函数中(匿名函数除外),
可以使用特殊语法直接返回元素,而不必返回一个枚举器实例。

yield return

yield return可以返回一个枚举器的单个元素。

class Boo : IEnumerable<int>
{
	public IEnumerator<int> GetEnumerator() {
		for (int i = 0; i < 10; i++)
		{
			yield return i;
		}
	}
	IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}
Boo b = new Boo();
foreach (var item in b)
{
	Console.WriteLine(item);
}

yield break

yield break语句用于终止方法。效果和return类似。
但是在使用了yield的方法内,就不允许再使用return了。

也就是说,不能一边返回元素,一遍返回整个迭代器。
即使因为流程控制语句,导致yield return是不可达代码。

最后

以上就是顺心夕阳为你收集整理的c#入门-迭代器foreach循环可迭代迭代器的全部内容,希望文章能够帮你解决c#入门-迭代器foreach循环可迭代迭代器所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(82)

评论列表共有 0 条评论

立即
投稿
返回
顶部