1, 从 For循环说起
在几乎所有的编程语言中,都有3大结构:顺序,选择,循环。它们就像是3种框架,用来搭建不同的模型。在这3种结构中,最为独特的,要当属循环结构了。其实,我觉得叫它“懒人结构”更好。
我们自己是比较擅长处理顺序和选择的,但是如果这些东西交给计算机处理,那么我们就要为编写很多代码,告诉它出现的各种情况,应该怎样处理各种情况,这对于计算机来说,其实是件比较困难的事。但对于循环结构,计算机是比较乐意处理它的。这是间非常有意思的事,我们厌倦重复,而计算机喜欢这种重复,它处理起来无压力。so ,这时候,我们可以和计算机合作,我们处理那些非常有创造性的东西,让计算机处理那些繁琐的重复工作。“懒人结构”创造了新的合作模式。
下面来看个非常经典的for循环求和:
static void Main(string[] args)
{
int i;
int [] a=new int[100];
int sum;
for (i = 1; i <= 100; i++)
{
a[i] = i;
sum += a[i];
}
Console.WriteLine(sum);
}
for循环起到了个框架的作用,每循环一次,它里面就变化一次,计算机对此乐此不疲,然后lazybones们就可以休息了。
for循环虽然非常好,但是一旦我要处理的东西不再是数字,而是其他别的东西,比如,我要重复给一个流水线上的啤酒瓶贴编号标签,这时候怎么办?
no problem,foreach循环可以帮你。foreach感觉是for循环的改进版,以前用for循环,只能利用整数进行循环遍历,而且还得自己控制上下界,一旦上下界控制不好,很可能出现越界的问题。但是foreach循环却不必担心,只要你给堆东西,我就能一个个处理掉,至于有多少,我是不管的。
2,foreach
例如,用foreach循环给瓶子贴标签的过程:
namespace foreach循环示例
{
class GlassLabel
{
private int Number;
public GlassLabel(int i)
{
Number = i;
}
public void PrintLabel()
{
Console.WriteLine("瓶子" + Number + "已经贴好了标签。");
}
}
class Program
{
static void Main(string[] args)
{
IList
GlassBasket = new List
(); //在瓶子篮子里面,加入100个瓶子 for (int i = 0; i < 100; i++) { GlassBasket.Add(new GlassLabel(i)); } //对100个瓶子贴标签 foreach (GlassLabel glass in GlassBasket) { glass.PrintLabel(); } } } }
看一下震撼的结果(部分图,可以自己运行程序看看):

要是你自己给100个瓶子贴标签,估计一会儿就又烦又累了,所以,lazybones们,还是把这些没有创意的工作交给计算机吧。< http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+ICAgICDV4tH5tKbA7dbYuLS5pNf3tcS6w7e9t6ijrM7Sw8fSqtfcveHPwsW2oaPV4tKyysfO0sPHzqrKssO00qrRp8+wyei8xsSjyr21xNSt0vKjusils/3W2Li00NS1xLmk1/ejrLK70qq94r72yM66zs7KzOK2vLTTzbe/qsq8oaM8L3A+CjxwPjxicj4KPC9wPgo8aDE+IDOjrLX8tPrG98Sjyr08L2gxPgo8cD48YnI+CjwvcD4KPHA+ICDSstDtysfS8s6q09DBy7Hg0uvG986qztLDx9f2usO1xGZvcmVhY2ijrMv50tTO0sPHw7+0zra8ysexo7PWobDEw8C01vfS5aGxo6y1q8rH0afPsM/Ctfy0+sb3xKPKvbu5yse63NKqsdjSqrXOoaM8L3A+CjxwPiAgIDxpbWcgc3JjPQ=="https://www.cppentry.com/upload_files/article/76/1_xpiqq__.jpg" alt="">
上面这个图可以分成左右两部分看,左边是我们要处理的对象,通常我们处理的是这个对象的一个集合。右边是对这个对象的遍历行为,也就是我们自己写一个foreach用来处理对象。
本模式的好处:迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可以让外部代码透明地访问集合内部的数据。