IEnumerable是集合,IEnumerator是集合的迭代器

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: |||超大  

我们常用IEnumerable,却忽视IEnumerator。简单来说,IEnumerable是可以被循环遍历的集合,IEnumerator实施循环遍历。

接口分别是:

public interface IEnumerator

{

bool MoveNext();

object Current{get;}

void Reset();

}

public interface IEnumerable

{

IEnumerator GetEnumerator();

}

来执行这样简单的一个控制台程序。

classPRogram

{

static void Main(string[] args)

{

IEnumerable<string>list = new List<string>() {"hello","world"};

foreach (var item in list)

{

Console.WriteLine(item);

}

Console.ReadKey();

}

}

在"解决方案资源管理器"中,右键控制台项目,点击"在文件资源管理器中打开文件"。

依次点击"bin"和"Debug"文件夹。

复制下当前文件目录。

打开开发人员命令提示。

由于应用程序文件在F盘,输入如下:

导向到刚才复制的目录,输入如下:

查看当前目录下的清单,输入如下:

使用.NET的ILDASM反编译应用程序文件,并输入到某个txt文本中。输入如下:

打开1.txt文件,输入如下:

1.txt文件被打开,相关的IL代码如下:

可见,foreach也是语法糖,当使用foreach循环遍历的时候,实际上是调用IEnumerable的IEnumerator的方法。

所以,对于foreach,可以换种写法:

class Program

{

static void Main(string[] args)

{

IEnumerable<string>list = new List<string>() { "hello", "world" };

IEnumerator it = list.GetEnumerator();

while (it.MoveNext())

{

Console.WriteLine(it.Current);

}

Console.ReadKey();

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航