foreach的本质

在C#中Foreach是一种非常方便的遍历集合的方式,但是在C这样的语言中,基本的循环语句并没有foreach的身影,所以foreach对于C#而言是一种封装了的用于遍历集合的方式,以下就分析下原理:

对于Foreach而言,本质上执行的是一个while()循环,所以可以理解为等效代码,但是只有while是无法完成的,还需要对集合做一些限定,主要内容包括:

1.实现IEnumerable接口,用于生成枚举器;

2.实现IEnumerator接口,用于实现枚举器;

具体的接口定义如下:

interface IEnumerable

{

  IEnumerator GetEnumerator();

}

interface IEnumerator

{

  object Current{get;}

  bool MoveNext();

  Void Reset();

}

对应上面两个接口也都提供了对应的泛型方法,就不列举了。基本的数据集合都实现了上面两个接口,或者说想要使用foreach必须得是实现了上面两个接口的集合。所以如果我们自定义一种集合,也可以手动实现枚举器。

而foreach真正实现的话就像下面的过程:

foreach(datap in datas){

}

.net编译后,实际的代码应该是这样的,
IEnumerator tor=datas.GetEnumerator()
while(tor.MoveNext())
{
  具体语句体
}

posted on 2021-01-21 12:09  BigBom原子  阅读(128)  评论(0编辑  收藏  举报