проблемы с объявлением статического перечисления, C#


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

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   51   2010-12-31 06:25:09

5 ответов:

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

public enum ProfileMenuBarTab { MainProfile, Edit, PhotoGallery }

взять static.
Перечисления-это типы, а не члены; нет понятия статического или нестатического перечисления.

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

и вы не должны делать public вложенные типы.

вам не нужно определять его как статический.При компиляции перечисляемого типа компилятор 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__;
}

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

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