troubles declaring static enum, C#
C#StaticEnumsC# Problem Overview
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!
C# Solutions
Solution 1 - C#
Enums are types, not variables. Therefore they are 'static' per definition, you dont need the keyword.
public enum ProfileMenuBarTab { MainProfile, Edit, PhotoGallery }
Solution 2 - C#
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)
Solution 3 - C#
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__;
}
Solution 4 - C#
An enum is a type, not a value. The modifier static
doesn't make much sense there.
Solution 5 - C#
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.
Solution 6 - C#
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
orstructs
directly in anamespace
they can not be marked asprivate
orprotected
just like other types. They can be justpublic
orinternal
just like other types. -
If you write your
enums
orstructs
directly in aclass
you can mark them asprivate
orprotected
too, as you can mark them asinternal
andpublic
.class
for inner types is like anamespace
for types except you can mark inner typesprivate
orpublic
too.