IEnumerable.GetEnumerator 方法
2013/3/11
返回一个循环访问集合的枚举器。
程序集: mscorlib(位于 mscorlib.dll 中)
[Visual Basic, C#]
C# 语言的 foreach 语句(在 Visual Basic 中为 For Each)隐藏了枚举器的复杂性。因此,建议使用 foreach,而不直接操作枚举器。
枚举器可用于读取集合中的数据,但不能用于修改基础集合。
最初,枚举器被定位于集合中第一个元素的前面。Reset 方法还会将枚举器返回到此位置。在此位置上,Current 属性未定义。因此,在读取 Current 的值之前,必须调用 MoveNext 方法将枚举器向前定位到集合的第一个元素。
在调用 MoveNext 或 Reset 之前,Current 返回同一个对象。MoveNext 将 Current 设置为下一个元素。
如果 MoveNext 越过集合的结尾,则枚举器将定位在该集合中最后一个元素的后面,且 MoveNext 将返回 false。当枚举器位于此位置时,对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最后一次调用返回 false,则 Current 为未定义。若要再次将 Current 设置为集合的第一个元素,可以调用 Reset,然后再调用 MoveNext。
只要集合保持不变,枚举器就保持有效。如果对集合进行更改(如添加、修改或删除元素),则枚举器将失效且不可恢复,而且其行为是不确定的。
枚举器没有对集合的独占访问权;因此,从头到尾对一个集合进行枚举在本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性,可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作,您必须实现自己的同步。