System.Collections.Hashtable.GetEnumerator 方法
方法描述
返回循环访问 Hashtable 的 IDictionaryEnumerator。
语法定义(C# System.Collections.Hashtable.GetEnumerator 方法 的用法)
public virtual IDictionaryEnumerator GetEnumerator()
参数/返回值
参数值/返回值 | 参数类型/返回类型 | 参数描述/返回描述 |
---|---|---|
返回值 | System.Collections.IDictionaryEnumerator | 用于 Hashtable 的 IDictionaryEnumerator。 |
提示和注释
[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。
只要集合保持不变,枚举数就保持有效。 如果对集合进行更改(如添加、修改或删除元素),则枚举数将失效且不可恢复,而且其行为是不确定的。
该枚举数不具有独占访问集合的权限;因此,枚举整个集合本质上不是一个线程安全的过程。 若要确保枚举过程中的线程安全性,可以在整个枚举过程中锁定集合。 若要允许多个线程访问集合以进行读写操作,则必须实现自己的同步。
此方法的运算复杂度是 O(1)。
因为序列化和反序列化 Hashtable 的枚举数会使元素重新排序,所以不调用 Reset 方法就不能继续枚举。
System.Collections.Hashtable.GetEnumerator 方法例子
下面的示例比较 GetEnumerator() 和 foreach 两者的使用以枚举 Hashtable 的内容
using System; using System.Collections; public class HashtableExample { public static void Main() { // Creates and initializes a new Hashtable. Hashtable clouds = new Hashtable(); clouds.Add("Cirrus", "Castellanus"); clouds.Add("Cirrocumulus", "Stratiformis"); clouds.Add("Altostratus", "Radiatus"); clouds.Add("Stratocumulus", "Perlucidus"); clouds.Add("Stratus", "Fractus"); clouds.Add("Nimbostratus", "Pannus"); clouds.Add("Cumulus", "Humilis"); clouds.Add("Cumulonimbus", "Incus"); // Displays the keys and values of the Hashtable using GetEnumerator() IDictionaryEnumerator denum = clouds.GetEnumerator(); DictionaryEntry dentry; Console.WriteLine(); Console.WriteLine(" Cloud Type Variation"); Console.WriteLine(" -----------------------------"); while (denum.MoveNext()) { dentry = (DictionaryEntry) denum.Current; Console.WriteLine(" {0,-17}{1}", dentry.Key, dentry.Value); } Console.WriteLine(); // Displays the keys and values of the Hashtable using foreach statement Console.WriteLine(" Cloud Type Variation"); Console.WriteLine(" -----------------------------"); foreach (DictionaryEntry de in clouds) { Console.WriteLine(" {0,-17}{1}", de.Key, de.Value); } Console.WriteLine(); } } // The program displays the following output to the console: // // Cloud Type Variation // ----------------------------- // Cirrocumulus Stratiformis // Stratocumulus Perlucidus // Cirrus Castellanus // Cumulus Humilis // Nimbostratus Pannus // Stratus Fractus // Altostratus Radiatus // Cumulonimbus Incus // // Cloud Type Variation // ----------------------------- // Cirrocumulus Stratiformis // Stratocumulus Perlucidus // Cirrus Castellanus // Cumulus Humilis // Nimbostratus Pannus // Stratus Fractus // Altostratus Radiatus // Cumulonimbus Incus*/
版本信息
.NET Framework 受以下版本支持:4、3.5、3.0、2.0、1.1、1.0 .NET Framework Client Profile 受以下版本支持:4、3.5 SP1
适用平台
Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。