声明静态枚举时出现问题,C#

声明静态枚举时出现问题,C#,c#,static,enums,C#,Static,Enums,嗨,我正在尝试定义一个静态枚举,如下所示: 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

嗨,我正在尝试定义一个静态枚举,如下所示:

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’对该项无效。”
我知道这很简单,但我似乎看不出问题所在。非常感谢!

取出
静态

枚举是类型,不是成员;没有静态或非静态枚举的概念

您可能试图为您的类型创建一个静态字段,但这与类型声明无关。
(尽管您可能不应该创建静态字段)


另外,.

您正在尝试使枚举声明为静态的,即类型为
ProfileMenuBarTab
的字段,以声明类(或任何类型)在类中,去掉static。

枚举是一种类型,而不是一个值。修饰符
static
在那里没有多大意义。

枚举是类型,而不是变量。因此它们在每个定义中都是“静态的”,您不需要关键字

public enum ProfileMenuBarTab { MainProfile, Edit, PhotoGallery }

不需要将其定义为静态。编译枚举类型时,C#编译器会将每个符号转换为该类型的常量字段。例如,编译器会处理前面显示的颜色枚举 就像您编写了类似于以下内容的代码一样:

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__;
}

Net中的类型可以是值类型引用类型

值类型->
枚举
结构
内置值类型
(布尔、字节、短、整数、长、sbyte、ushort、uint、ulong、字符、双精度、十进制)

引用类型->
接口
委托
动态
字符串

因此,正如您所看到的,枚举是类型(如
结构
)。更准确地说,它们是值类型。关于值类型的一个重要点是,您应该能够从它们创建实例。例如,
int
这是一个结构的好处是什么(值类型)如果您不能创建一个实例来存储2、3或其中的任何数字

这是一般规则->不能使用
静态
修饰符创建自定义值类型(
枚举
结构

一些要点:

  • 如果直接在
    命名空间中编写
    枚举
    结构
    ,则不能像其他类型一样将它们标记为
    私有
    受保护
    。它们可以像其他类型一样是
    公共
    内部

  • 如果您直接在
    类中编写
    枚举
    结构
    ,您也可以将它们标记为
    私有
    受保护
    ,因为您可以将它们标记为
    内部
    公共
    对于内部类型就像是
    命名空间
    对于类型,除非您可以标记内部类型也可以输入
    私有
    公共


谢谢,这是一个漫长的夜晚。我删除了“static”,一切正常。我还在阅读你的链接,发现嵌套枚举是你规则的例外。“嵌套枚举数和受保护类型不受此规则约束。”@SLaks,此规则例外对你有意义吗?@Ray:枚举数(
IEnumerator
implementation)与枚举无关。“嵌套枚举数和受保护类型不受此规则的约束。"@SLaks,他有一个公共枚举,你发布了一个链接,上面说不要公开嵌套类型,我只是指出,根据你链接的页面,枚举是免税的,所以可以公开。对于和类一样,类也是一个类型,可以是静态的。既然你不能用该类的实例访问该枚举,它肯定是静态的tic,因此应该使用static修饰符,其他一切都是不一致的,但它是C#…枚举定义为“静态”,但我们不能在静态类内使用它为什么?@user2323308 10.1.1.3静态类静态类不能实例化,不能用作类型,只能包含静态成员…静态类可以仅包含静态成员(§10.3.7)。请注意,常量和嵌套类型被分类为静态成员。10.3.7类的静态成员和实例成员是静态成员或实例成员……常量或类型声明隐式声明静态成员。参考: