web-dev-qa-db-ja.com

静的列挙型、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'はこのアイテムに対して有効ではありません。」それは簡単なことですが、問題が見えないようです。

55
RayLoveless

列挙型は変数ではなく型です。したがって、定義ごとに「静的」であるため、キーワードは必要ありません。

public enum ProfileMenuBarTab { MainProfile, Edit, PhotoGallery }
117
magnattic

staticを取り出します。
列挙型はメンバーではなく型です。静的列挙型または非静的列挙型の概念はありません。

あなたのタイプの静的fieldを作成しようとしているかもしれませんが、それはタイプ宣言とは何の関係もありません。
(おそらく静的フィールドを作成するべきではありませんが)

また、 publicネストされた型を作成しないでください

12
SLaks

静的として定義する必要はありません。列挙型がコンパイルされると、C#コンパイラは各シンボルをtypeの定数フィールドに変換します。たとえば、コンパイラは、先ほど示した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__;
}
6
Tarik

列挙型は値ではなく型です。修飾子staticはそこではあまり意味がありません。

2
Brian Clapper

列挙型宣言を静的にしようとしています。つまり、ProfileMenuBarTab型のフィールドです。クラス内のクラス(または何でも)を宣言するには、静的を残します。

1
Femaref