GetEnumerator是返回实例的枚举数。换句话说就是返回集的中所有元素一个一个列出来。我们可以通过MoveNext()得到集合中的所有元素。
这里的名词稍微说明一下,
枚举就:是一个一个的列举。
枚举数:是循环访问其关联集合的对象。它提供一种方法帮助你遍历一个集合。
GetEnumerator用法请看下边代码中红色部分。 这里顺便作了测试。发现GetEnumerator要比Foreach稍微快一点。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Collections;
namespace GetEnumeratorTest
{
class Program
{
static void Main(string[] args)
{
const int times =1000;
Stopwatch watch = new Stopwatch();
Hashtable hastable = new Hashtable();
for (int i = 0; i < 10000; i++)
{
hastable.Add(i, i.ToString() + "值");
}
//测试GetEnumerator
watch.Start();
for (int i = 0; i < times; i++)
{
IDictionaryEnumerator enumerator = hastable.GetEnumerator();
while (enumerator.MoveNext())
{
string key = enumerator.Key.ToString();
string value = enumerator.Value.ToString();
}
}
watch.Stop();
Console.WriteLine("Hashtable GetEnumerator耗时" + watch.ElapsedMilliseconds);
Console.WriteLine("---------------");
watch.Reset();
//测试ForEach
watch.Start();
for (int i = 0; i < times; i++)
{
foreach (object item in hastable.Keys)
{
string key = item.ToString();
string value = hastable[item].ToString();
}
}
watch.Stop();
Console.WriteLine("Hashtable ForEach耗时" + watch.ElapsedMilliseconds);
Console.WriteLine("---------------");
watch.Reset();
Dictionary<int, string> dictionary = new Dictionary<int, string>();
for (int i = 0; i < 10000; i++)
{
dictionary.Add(i, i.ToString() + "值");
}
watch.Start();
for (int i = 0; i < times; i++)
{
Dictionary<int,string>.Enumerator enumerator = dictionary.GetEnumerator();
while (enumerator.MoveNext())
{
int key = enumerator.Current.Key;
string value = enumerator.Current.Value;
}
}
watch.Stop();
Console.WriteLine("Dictionary GetEnumerator耗时" + watch.ElapsedMilliseconds);
Console.WriteLine("---------------");
watch.Reset();
//测试ForEach
watch.Start();
for (int i = 0; i < times; i++)
{
foreach (int item in dictionary.Keys)
{
int key = item;
string value = dictionary[item];
}
}
watch.Stop();
Console.WriteLine("Dictionary ForEach耗时" + watch.ElapsedMilliseconds);
Console.WriteLine("---------------");
Console.ReadKey();
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Collections;
namespace GetEnumeratorTest
{
class Program
{
static void Main(string[] args)
{
const int times =1000;
Stopwatch watch = new Stopwatch();
Hashtable hastable = new Hashtable();
for (int i = 0; i < 10000; i++)
{
hastable.Add(i, i.ToString() + "值");
}
//测试GetEnumerator
watch.Start();
for (int i = 0; i < times; i++)
{
IDictionaryEnumerator enumerator = hastable.GetEnumerator();
while (enumerator.MoveNext())
{
string key = enumerator.Key.ToString();
string value = enumerator.Value.ToString();
}
}
watch.Stop();
Console.WriteLine("Hashtable GetEnumerator耗时" + watch.ElapsedMilliseconds);
Console.WriteLine("---------------");
watch.Reset();
//测试ForEach
watch.Start();
for (int i = 0; i < times; i++)
{
foreach (object item in hastable.Keys)
{
string key = item.ToString();
string value = hastable[item].ToString();
}
}
watch.Stop();
Console.WriteLine("Hashtable ForEach耗时" + watch.ElapsedMilliseconds);
Console.WriteLine("---------------");
watch.Reset();
Dictionary<int, string> dictionary = new Dictionary<int, string>();
for (int i = 0; i < 10000; i++)
{
dictionary.Add(i, i.ToString() + "值");
}
watch.Start();
for (int i = 0; i < times; i++)
{
Dictionary<int,string>.Enumerator enumerator = dictionary.GetEnumerator();
while (enumerator.MoveNext())
{
int key = enumerator.Current.Key;
string value = enumerator.Current.Value;
}
}
watch.Stop();
Console.WriteLine("Dictionary GetEnumerator耗时" + watch.ElapsedMilliseconds);
Console.WriteLine("---------------");
watch.Reset();
//测试ForEach
watch.Start();
for (int i = 0; i < times; i++)
{
foreach (int item in dictionary.Keys)
{
int key = item;
string value = dictionary[item];
}
}
watch.Stop();
Console.WriteLine("Dictionary ForEach耗时" + watch.ElapsedMilliseconds);
Console.WriteLine("---------------");
Console.ReadKey();
}
}
}
结果:
Hashtable GetEnumerator耗时 1584
Hashtable ForEach耗时 1884
Dictionary GetEnumerator耗时 365
Dictionary ForEach耗时 375