概述
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循环可迭代迭代器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复