当"enum"在c#.NET中成功时,为什么"Enum"无法编译?

ger*_*wry 1 c# alias compiler-errors syntax-error visual-studio-2015

为什么将枚举更改为E num会导致编译错误?

通常在c#中,可以使用ac#type或其.NET等价物.

例:

string jeff = "Atwood";  // string type
String name = "Jeff";    // System.String
Run Code Online (Sandbox Code Playgroud)

" 字符串(C#参考) "
"的字符串类型表示的零个或更多的Unicode字符的序列.
字符串为一个别名字符串在.NET Framework".

以下.NET控制台应用程序成功" enum ":

using System;

namespace UnhappyWithSystemEnum
{
    enum FirstEnum { Nothing = 0, Something = 666 };

    class CapitalE
    {
        static void Main(string[] args)
        {
            Console.WriteLine(FirstEnum.Nothing);
            Console.WriteLine(FirstEnum.Something);
            Console.WriteLine("Press ENTER to Exit");
            Console.ReadLine();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

Nothing
Something
Press ENTER to Exit
Run Code Online (Sandbox Code Playgroud)

但是,将" enum " 更改为" E num"会导致多个错误:

    Enum FirstEnum { Nothing = 0, Something = 666 };
Run Code Online (Sandbox Code Playgroud)

错误:

'invalid-global-code.FirstEnum':
    property or indexer must have at least one accessor
Run Code Online (Sandbox Code Playgroud)

请解释.

MSDN参考:
" 枚举类 "
" 枚举(C#参考) "

Ste*_*nio 5

发生这种情况是因为stringString的别名,但枚举Enum不同:

枚举关键字定义是继承自一种新型System.Enum与成员静态字段.

enum MyEnum
{
    Member
}
Run Code Online (Sandbox Code Playgroud)

是等价的(我认为它实际上是真正生成的CIL):

public class MyEnum : System.Enum
{
    public static int Member;
}
Run Code Online (Sandbox Code Playgroud)

如果你改用Enum:

Enum MyEnum
{
     Member
}
Run Code Online (Sandbox Code Playgroud)

就像:

StringBuilder MyEnum
{
    Member
}
Run Code Online (Sandbox Code Playgroud)

这显然对编译器没有意义.