在Main()中定义枚举给出编译错误(c#)

时间:2014-06-26 14:18:59

标签: c# enumeration

在Main()中定义Enumertion会产生编译错误,为什么会这样? (如果在'类程序中定义它,工作正常)

   using System;

        class program
         {
            // If define here, it works fine.
            // public enum Days {Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday};
            static void Main()
              {
                public enum Days {Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday}
                Days today;
                today = Days.Saturday;

                Console.WriteLine("Today is {0}",today);
              }

        }

编译错误:

d:\MyProgs>csc _19enum.cs
Microsoft (R) Visual C# 2010 Compiler version 4.0.30319.1
Copyright (C) Microsoft Corporation. All rights reserved.

_19enum.cs(7,5): error CS1513: } expected
_19enum.cs(10,15): error CS1519: Invalid token '=' in class, struct, or
        interface member declaration
_19enum.cs(10,30): error CS1519: Invalid token ';' in class, struct, or
        interface member declaration
_19enum.cs(12,20): error CS1519: Invalid token '(' in class, struct, or
        interface member declaration
_19enum.cs(12,41): error CS1519: Invalid token ')' in class, struct, or
        interface member declaration
_19enum.cs(15,1): error CS1022: Type or namespace definition, or end-of-file
        expected

3 个答案:

答案 0 :(得分:4)

您无法在方法中定义枚举。如果要在其他地方使用它们,请在课堂上定义它们,或者最好在课堂外定义它们:

using System;

public enum Days {Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday}

class program
 {
    // here is fine too

    static void Main()
      {
        Days today;
        today = Days.Saturday;

        Console.WriteLine("Today is {0}",today);
      }

}

答案 1 :(得分:1)

enum的核心是const声明,无法在方法中声明。

查看Program Files (x86)/Microsoft Visual Studio 12.0/VC#/Specifications/1033处的C#规范以获取更多信息。

答案 2 :(得分:1)

你的问题的答案是,因为C# specs这样说。

  

9.6输入声明 (from C# specification document)

     

类型声明是类声明(第10.1节),a   struct-declaration(第11.1节),接口声明(第13.1节), an   枚举声明(§14.1),或委托声明(§15.1)。

所以enum是一种类型,如果我们在同一部分中看到的话。

  

类型声明可以作为顶级声明出现在   编译单元或作为命名空间中的成员声明,​​类,   或者结构。

方法不是顶级声明,只有可能的选项是命名空间,类和结构。

因此,您无法在方法中定义enum