проблемы с объявлением статического перечисления, C # - PullRequest
55 голосов
/ 31 декабря 2010

Привет, я пытаюсь объявить статическое перечисление так:

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 »недопустим для этого элемента». Я знаю, что это что-то простое, но я не вижу проблемы. Большое спасибо!

Ответы [ 5 ]

117 голосов
/ 31 декабря 2010

Перечисления являются типами, а не переменными.Поэтому они являются «статическими» для каждого определения, вам не нужно ключевое слово.

public enum ProfileMenuBarTab { MainProfile, Edit, PhotoGallery }
12 голосов
/ 31 декабря 2010

Вынуть static.
Перечисления являются типами, а не членами;нет понятия статического или нестатического перечисления.

Возможно, вы пытаетесь создать статическое поле вашего типа, но это не имеет ничего общего с объявлением типа.
(хотя вы, вероятно, не должны создавать статическое поле)

Кроме того, вы не должны создавать public вложенных типов .

6 голосов
/ 21 мая 2012

Вам не нужно определять его как статический. Когда перечислимый тип компилируется, компилятор 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__;
}
2 голосов
/ 31 декабря 2010

Перечисление - это тип, а не значение.Модификатор static не имеет особого смысла.

1 голос
/ 31 декабря 2010

Вы пытаетесь сделать перечисление статическим, то есть поле типа ProfileMenuBarTab. Чтобы объявить класс (или что-то еще) в классе, оставьте статический вне.

...