客户枚举类型和系统枚举类型之间是否有任何区别

she*_*bin 6 c#

我做了如下↓的测试

1)创建客户枚举(从每周的复制)

[Serializable]
public enum Tester
{
    // ??:
    //     Indicates Sunday.
    Sunday = 0,
    //
    // ??:
    //     Indicates Monday.
    Monday = 1,
    //
    // ??:
    //     Indicates Tuesday.
    Tuesday = 2,
    //
    // ??:
    //     Indicates Wednesday.
    Wednesday = 3,
    //
    // ??:
    //     Indicates Thursday.
    Thursday = 4,
    //
    // ??:
    //     Indicates Friday.
    Friday = 5,
    //
    // ??:
    //     Indicates Saturday.
    Saturday = 6,
}
Run Code Online (Sandbox Code Playgroud)

2)创建两种测试方法......

    static void TestEnumToString()
    {
        var t = Tester.Sunday;
        Enumerable.Range(0, 1000000).ToList().ForEach(i => t.ToString());
    }

    static void DayOfWeekEnumToString()
    {
        var t = DayOfWeek.Sunday;
        Enumerable.Range(0, 1000000).ToList().ForEach(i => t.ToString());
    }
Run Code Online (Sandbox Code Playgroud)

3)主要方法

    static void Main()
    {
        Stopwatch sw = new Stopwatch();
        sw.Start();
        TestEnumToString();
        sw.Stop();
        Console.WriteLine("Tester:" + sw.ElapsedMilliseconds);


        sw = new Stopwatch();
        sw.Start();
        DayOfWeekEnumToString();
        sw.Stop();
        Console.WriteLine("DayOfWeek:" + sw.ElapsedMilliseconds);

        Console.ReadKey();
    }
Run Code Online (Sandbox Code Playgroud)

4)结果:

Tester : 3164ms
DayOfWeek : 7032ms
Run Code Online (Sandbox Code Playgroud)

我真的不知道为什么系统类型枚举慢于客户枚举类型....有人能告诉我为什么?谢谢...

更新编辑: 将[ComVisible(true)]添加到枚举.

[ComVisible(true)]
[Serializable]
public enum Tester
{
    Sunday = 0,


    Monday = 1,


    Tuesday = 2,


    Wednesday = 3,


    Thursday = 4,


    Friday = 5,


    Saturday = 6,
}
Run Code Online (Sandbox Code Playgroud)

结果 :

Tester : 5018ms
DayOfWeek : 7032ms
Run Code Online (Sandbox Code Playgroud)

系统枚举类型仍然比客户枚举类型慢...

JPB*_*anc 1

枚举可以用 [ComVisible(true)] 或 [Flags] 装饰,并且每次它都会更改测试结果。

\n\n
[Serializable]\n//[Flags]\n[ComVisible(true)]\npublic enum Tester\n{    \n  // \xe6\xa6\x82\xe8\xa6\x81:\n  //     Indicates Sunday.\n  Sunday = 0,    \n
Run Code Online (Sandbox Code Playgroud)\n