foreach遍歷實現原理_迭代器實現(使用foreach)
遍歷陣列或者集合時,之所以使用foreach可以實現,那是因為類中繼承了IEnunerable介面,此介面可以重寫IEnumerator型別的GetEnumerator()方法(此方法即得到一個列舉器),正是因為這個介面(方法)所以foreach才會起到遍歷的作用
上程式碼:
namespace ForeachTest
{
public class Person : IEnumerable
{
private string[] m_love = new string[] { "理智", "林青霞", "李若彤", "劉亦菲" };
// 得到一個“列舉器”
public IEnumerator GetEnumerator()
{
for (int i = 0; i < m_love.Length; i++)
{
// 使用yield return語句可一次返回一個元素
// 通過 foreach 語句來使用迭代器方法。 foreach 迴圈的每次迭代都會呼叫迭代器方法。 迭代器方法執行到 yield return 語句時,會返回一個 expression,並保留當前在程式碼中的位置。 下次呼叫迭代器函式時,將從該位置重新開始執行。
yield return m_love[i];
}
}
}
}
main程式碼:
class Program
{
static void Main(string[] args)
{
Person person = new Person();
// 通過foreach來呼叫Person yield return出來的值
foreach(string item in person) // 這邊可以根據return的值型別來寫接收型別。本次return出來的是string
{
Console.WriteLine(item);
}
Console.ReadKey();
}
}
當然了,foreach迭代器的複雜度完全不止於此,我這只是最簡單的認識。等日後瞭解的更深些了,再來更新。歡迎各位指正 不吝賜教哈