stonstad 发表于 2023-3-14 19:31

Unity学习路线-理论知识部分-C#-C#其他-GetEnumerator用法 ...

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.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;
                }
            }
            watch.Stop();
            Console.WriteLine("Dictionary ForEach耗时" + watch.ElapsedMilliseconds);
            Console.WriteLine("---------------");
            Console.ReadKey();
      }
    }
}
结果:
    Hashtable GetEnumerator耗时 1584
    Hashtable ForEach耗时 1884
    Dictionary GetEnumerator耗时 365
    Dictionary ForEach耗时 375
页: [1]
查看完整版本: Unity学习路线-理论知识部分-C#-C#其他-GetEnumerator用法 ...