在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
答案 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
。