「列挙 文字列」の変換

using System;

namespace Test
{
    enum Color
    {
        NoColor,
        Red,
        Green,
        Blue
    }

    public class Foo
    {
        public static void Main()
        {
            // 列挙 => 文字列
            Color c = Color.Red;
            Console.WriteLine(c.ToString());     // 名前の文字列に変換
            Console.WriteLine(c.ToString("D"));  // 数値の文字列に変換
            Console.WriteLine();
            
            // 文字列 => 列挙
            Color c2 = (Color)Enum.Parse(typeof(Color), "Red");  // 文字列から列挙に変換
            Color c3 = (Color)Enum.Parse(typeof(Color), "2");    // 数値の文字列から列挙に変換
            Console.WriteLine(c2);
            Console.WriteLine(c3);
            Console.WriteLine();
            
            // 列挙の名前のリストを取得
            string[] names = Enum.GetNames(typeof(Color)); // 名前の配列を取得
            Array values = Enum.GetValues(typeof(Color));  // 値の配列を取得
            foreach (Color col in Enum.GetValues(typeof(Color)))
            {
                Console.WriteLine("{0}: {1}", col, (int)col);
            }
            // [実行結果]
            // Red
            // 1
            //
            // Red
            // Green
            //
            // NoColor: 0
            // Red: 1
            // Green: 2
            // Blue: 3
        }
    }
}

但し、文字列から列挙に大量に変換する場合は、Dictionaryのような辞書を作成しておいて変換した方がパフォーマンス良かった。Enum.Parse()は単に列挙をループで回して一致する値を探しているだけなのだろうか?