声明静态枚举的问题,C#

问题描述 投票:58回答:6

嗨,我试图像这样声明一个静态枚举:

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'对此项目无效。”我知道这很简单,但似乎看不到问题。非常感谢!

c# static enums
6个回答
119
投票

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

public enum ProfileMenuBarTab { MainProfile, Edit, PhotoGallery }

12
投票

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

您可能正在尝试创建您的类型的静态field,但这与类型声明无关。(尽管您可能不应该创建静态字段)

也,you should not make public nested types


6
投票

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

public

2
投票

枚举是类型,而不是值。修饰符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__; } 在这里没有多大意义。


1
投票

您正在尝试使枚举声明为静态,即static类型的字段。要在一个类中声明一个类(或其他任何东西),请忽略静态变量。


0
投票

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

[值类型-> ProfileMenuBarTabenumsstructs(bool,byte,short,int,int,long,sbyte,ushort,uint,ulong,char,double,decimal)]

参考类型-> built-in values typesclassesinterfacesdelegatesdynamic

所以,正如您所看到的,枚举是类型(例如类和结构等),它们也是值类型。关于值类型的重要一点是,您应该能够从它们创建实例。例如,如果您无法创建用于存储2、3或任何数字的实例,strings是struct(值类型)的好处是什么?这是一般规则-> 您无法使用int修饰符创建自定义值类型(enumsstructs)。

某些点:

正如您在创建枚举类型或结构类型时看到的那样,无法将它们标记为静态,因此,您不能将它们声明为静态上课了因为只能以静态成员声明静态成员类。

如果直接在命名空间中编写枚举或结构,它们可以不会像其他类型一样被标记为私有或受保护的类型。

© www.soinside.com 2019 - 2024. All rights reserved.