Reputation: 21038
Hi I'm trying to declar a static enum like so:
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)
{
...
" But I'm getting the following error: "The modifier 'static' is not valid for this item." I know it's something simple but I can't seem to see the problem. Much thanks!
Upvotes: 76
Views: 92780
Reputation:
Types in .Net can be either value types or reference types.
Value types -> enums
, structs
and built-in values types
(bool, byte, short, int, long, sbyte, ushort, uint, ulong, char, double, decimal)
Reference types -> classes
, interfaces
, delegates
, dynamic
and strings
So, as you can see enums are types(like classes
and structs
, etc
). more precisely they are value types. An important point about value types is that you should be able to create instances from them. For example, What is its benefit of int
that is a struct (value type) if you can't create an instance of that for storing 2, 3 or any number in it?!
This is the general rule -> you cannot create custom value types (enums
and structs
) with the static
modifier.
Some points:
If you write your enums
or structs
directly in a namespace
they can not be marked as private
or protected
just like other types. They can be just public
or internal
just like other types.
If you write your enums
or structs
directly in a class
you can mark them as private
or protected
too, as you can mark them as internal
and public
. class
for inner types is like a namespace
for types except you can mark inner types private
or public
too.
Upvotes: 1
Reputation: 12988
Enums are types, not variables. Therefore they are 'static' per definition, you dont need the keyword.
public enum ProfileMenuBarTab { MainProfile, Edit, PhotoGallery }
Upvotes: 164
Reputation: 81711
You don't need to define it as static.When an enumerated type is compiled, the C# compiler turns each symbol into a constant field of the type . For example, the compiler treats the Color enumeration shown earlier as if you had written code similar to the following:
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__;
}
Upvotes: 8
Reputation: 26201
An enum is a type, not a value. The modifier static
doesn't make much sense there.
Upvotes: 2
Reputation: 61427
You are trying to make an enum declartion static, ie a field of the type ProfileMenuBarTab
. To declare a class (or whatever) in a class, leave the static out.
Upvotes: 1
Reputation: 887195
Take out static
.
Enums are types, not members; there is no concept of a static or non-static enum.
You may be trying to make a static field of your type, but that has nothing to do with the type declaration.
(Although you probably shouldn't be making a static field)
Also, you should not make public
nested types.
Upvotes: 17