Dictionary<TKey,TValue>.IEnumerable.GetEnumerator 方法

定义

返回一个循环访问集合的枚举器。

 virtual System::Collections::IEnumerator ^ System.Collections.IEnumerable.GetEnumerator() = System::Collections::IEnumerable::GetEnumerator;
System.Collections.IEnumerator IEnumerable.GetEnumerator ();
abstract member System.Collections.IEnumerable.GetEnumerator : unit -> System.Collections.IEnumerator
override this.System.Collections.IEnumerable.GetEnumerator : unit -> System.Collections.IEnumerator
Function GetEnumerator () As IEnumerator Implements IEnumerable.GetEnumerator

返回

IEnumerator

可用于循环访问集合的 IEnumerator

实现

注解

foreach C++ 语言 (for each的语句, For Each Visual Basic) 隐藏枚举器的复杂性。 因此,建议使用 foreach,而不是直接操作枚举数。

枚举器可用于读取集合中的数据,但不能用于修改基础集合。

最初,枚举数定位在集合中第一个元素的前面。 该方法 Reset 还会将枚举器带回此位置。 在此位置,属性 Current 未定义。 因此,在读取值Current之前,必须调用MoveNext该方法,将枚举器提升到集合的第一个元素。

属性 Current 返回相同的元素,直到 MoveNext 调用或 Reset 方法。 MoveNextCurrent 设置为下一个元素。

如果 MoveNext 传递集合的末尾,则枚举器将定位在集合中的最后一个元素之后并 MoveNext 返回 false。 当枚举器处于此位置时,后续调用 MoveNext 也会返回 false。 如果返回false的最后一次调用MoveNextCurrent则为未定义。 若要再次将 Current 设置为集合的第一个元素,可以调用 Reset 并接着调用 MoveNext

只要集合保持不变,枚举器就仍有效。 如果对集合进行了更改(例如添加元素或更改容量),则枚举器将不可恢复地失效,下次调用 MoveNextIEnumerator.Reset 引发该 InvalidOperationException调用。

仅限 .NET Core 3.0+ :不使枚举器无效的唯一可变方法也是RemoveClear

该枚举数不具有独占访问集合的权限;因此,枚举整个集合本质上不是一个线程安全的过程。 若要确保枚举过程中的线程安全性,可以在整个枚举过程中锁定集合。 若要允许多个线程访问集合以进行读写操作,则必须实现自己的同步。

System.Collections.Generic 命名空间中集合的默认实现是不同步的。

此方法是一个 O (1) 操作。

适用于

另请参阅