Enum.IsDefinedのパフォーマンス

たまにはC#の小ネタで。
Enum.IsDefinedによるチェックですが、

using System;
using System.Diagnostics;

public enum MyEnum
{
    X,
    Y,
    Z = 99,
}

class Program
{
    private const int LOOP = 10000000;
    static bool IsDefined(MyEnum e)
    {
        switch (e)
        {
            case MyEnum.X:
            case MyEnum.Y:
            case MyEnum.Z:
                break;
            default:
                return false;
        }
        return true;
    }

    static void Main(string[] args)
    {
        var sw = new Stopwatch();
        sw.Start();
        for (int i = 0; i < LOOP; ++i)
            Enum.IsDefined(typeof(MyEnum), 99);
        sw.Stop();
        Console.WriteLine(sw.ElapsedMilliseconds);

        sw.Reset();
        sw.Start();
        for (int i = 0; i < LOOP; ++i)
            IsDefined((MyEnum)99);
        sw.Stop();
        Console.WriteLine(sw.ElapsedMilliseconds);

    }
}

/* 結果
8459
71
 */

ちまちま実装した方がかなり速いです。これは、Enum.IsDefinedの実装がReflectionを使っている所為らしいです。