声明静态枚举的麻烦,C#

时间:2010-12-31 03:25:09

标签: 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
        public static enum ProfileMenuBarTab { MainProfile, Edit, photoGallery }

        public ActionResult cpTopMenuBar(string tabSelected)
        {
            ...            

” 但是我收到以下错误:“修饰符'static'对此项无效。” 我知道这很简单,但我似乎无法看到问题。非常感谢!

6 个答案:

答案 0 :(得分:113)

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

public enum ProfileMenuBarTab { MainProfile, Edit, PhotoGallery }

答案 1 :(得分:12)

取出static
枚举是类型,而不是成员;没有静态或非静态枚举的概念。

您可能正在尝试制作类型的静态字段,但这与类型声明无关。
(虽然你可能不应该制作静态字段)

另外,you should not make public nested types

答案 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)

首先,我要为我的英语不好道歉。请帮助我改进文字。

.p中的

类型可以是值类型引用类型

值类型-> addItem()enumsstructs(bool,byte,short,int,long,sbyte,ushort,uint,ulong,字符,双精度,十进制)

引用类型-> built-in values typesclassesinterfacesdelegatesdynamic

因此,如您所见,枚举是类型(例如stringsclassesstructs)。更准确地说,它们是值类型。关于值类型的重要一点是,您应该能够从它们创建实例。例如,如果您无法创建用于存储2、3或任何数字的实例,etc作为结构(值类型)有什么好处?!

这是一般规则-> 您无法使用int修饰符创建自定义值类型(enumsstructs)。

一些要点:

  

如果您直接在static中编写enumsstructs,则可以   不会像其他类型一样标记为namespaceprivate。与其他类型一样,它们可以只是protectedpublic

  

如果您直接在internal中编写enumsstructs,则可以   将它们也标记为classprivate,因为您可以将它们标记为   protectedinternal。内部类型的public就像class   对于类型,除了您也可以标记内部类型namespaceprivate