Dictionary<TKey,TValue>.GetEnumerator 方法

定义

返回循环访问 Dictionary<TKey,TValue> 的枚举数。

public:
 System::Collections::Generic::Dictionary<TKey, TValue>::Enumerator GetEnumerator();
public System.Collections.Generic.Dictionary<TKey,TValue>.Enumerator GetEnumerator ();
member this.GetEnumerator : unit -> System.Collections.Generic.Dictionary<'Key, 'Value>.Enumerator
Public Function GetEnumerator () As Dictionary(Of TKey, TValue).Enumerator

返回

用于 Dictionary<TKey,TValue>.EnumeratorDictionary<TKey,TValue> 结构。

注解

出于枚举目的,每个项都是表示 KeyValuePair<TKey,TValue> 值及其键的结构。

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

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

最初,枚举数定位在集合中第一个元素的前面。 在此位置上,未定义 Current。 在读取 的值Current之前,MoveNext必须调用 方法,将枚举数推进到集合的第一个元素。

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

如果 MoveNext 传递集合的末尾,则枚举器位于集合中最后一个元素之后,并 MoveNext 返回 false。 当枚举器位于此位置时,对 MoveNext 的后续调用也会返回 false。 如果最后一次MoveNext调用返回 ,falseCurrent则为未定义。 无法再次将 Current 设置为集合的第一个元素;必须改为创建新的枚举器实例。

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

仅限 .NET Core 3.0+ :唯一不会使枚举器 Remove 失效的可变方法是 和 Clear

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

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

此方法是 O (1) 操作。

适用于

另请参阅