嗨,我正试图像这样声明一个静态枚举:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace Lds.CM.MyApp.Controllers
{
public class MenuBarsController : Controller
{
// Menu Bar enums
public static enum ProfileMenuBarTab { MainProfile, Edit, photoGallery }
public ActionResult cpTopMenuBar(string tabSelected)
{
...
” 但是我收到以下错误:“修饰符'static'对此项无效。” 我知道这很简单,但我似乎无法看到问题。非常感谢!
答案 0 :(得分:113)
枚举是类型,而不是变量。因此,根据定义,它们是“静态的”,您不需要关键字。
public enum ProfileMenuBarTab { MainProfile, Edit, PhotoGallery }
答案 1 :(得分:12)
取出static
。
枚举是类型,而不是成员;没有静态或非静态枚举的概念。
您可能正在尝试制作类型的静态字段,但这与类型声明无关。
(虽然你可能不应该制作静态字段)
答案 2 :(得分:6)
您不需要将其定义为static。当编译枚举类型时,C#编译器会将每个符号转换为该类型的常量字段。例如,编译器会处理前面显示的Color枚举 就像你编写了类似于以下内容的代码:
internal struct Color : System.Enum {
// Below are public constants defining Color's symbols and values
public const Color White = (Color) 0;
public const Color Red = (Color) 1;
public const Color Green = (Color) 2;
public const Color Blue = (Color) 3;
public const Color Orange = (Color) 4;
// Below is a public instance field containing a Color variable's value
// You cannot write code that references this instance field directly
public Int32 value__;
}
答案 3 :(得分:2)
枚举是一种类型,而不是一种价值。修饰符static
在那里没有多大意义。
答案 4 :(得分:1)
您正在尝试将枚举声明设为静态,即ProfileMenuBarTab
类型的字段。要在类中声明一个类(或其他类),请将静态输出。
答案 5 :(得分:0)
类型可以是值类型或引用类型。
值类型-> addItem()
,enums
和structs
(bool,byte,short,int,long,sbyte,ushort,uint,ulong,字符,双精度,十进制)
引用类型-> built-in values types
,classes
,interfaces
,delegates
和dynamic
因此,如您所见,枚举是类型(例如strings
和classes
,structs
)。更准确地说,它们是值类型。关于值类型的重要一点是,您应该能够从它们创建实例。例如,如果您无法创建用于存储2、3或任何数字的实例,etc
作为结构(值类型)有什么好处?!
这是一般规则-> 您无法使用int
修饰符创建自定义值类型(enums
和structs
)。
一些要点:
如果您直接在
static
中编写enums
或structs
,则可以 不会像其他类型一样标记为namespace
或private
。与其他类型一样,它们可以只是protected
或public
。
。
如果您直接在
internal
中编写enums
或structs
,则可以 将它们也标记为class
或private
,因为您可以将它们标记为protected
和internal
。内部类型的public
就像class
对于类型,除了您也可以标记内部类型namespace
或private
。