一直觉得C#的yield语法很神奇,最近抽空好好研究了一下,写篇文章总结总结
首先看如下一个代码段;
int[] arr = { 0, 1, 2, 3, 4};
foreach (int i in arr)
{
Console.Write("{0} ", i);
}
非常简单的一个数组,使用foreach语句访问数组中每一个元素然后输出。不过这里有个问题,相比于普通的循环用法如while和for,foreach是如何实现遍历数组中每个元素的呢?
在使用反编译工具ILSpy将生成的exe文件反编译后得到如下代码:
int[] arr = new int[]
{
0,
1,
2,
3,
4
};
int[] array = arr;
for (int j = 0; j < array.Length; j++)
{
int i = array[j];
Console.Write("{0} ", i);
}
可以看到对于数组而言,foreach被简单地转换为for语句,那如果是一个list对象呢?
int[] arr = { 0, 1, 2, 3, 4};
List<int> li = new List<int>(arr);
foreach (int i in li)
{
Console.Write("{0} ", i);
}