This is probably a stupid question, but I can\'t seem to do it. I want to set up some enums in one class like this:
public enum Direction { north, east, south,
Declare enum in the scope of a namespace like a class but not into a class:
namespace MyApplication
{
public enum Direction { north, east, south, west };
}
In case enum is declared in the scope of a class, you have make this class public too:
namespace MyApplication
{
public class MyClass
{
public enum Direction { north, east, south, west };
}
}
Usage:
MyClass.Direction dir = ...
It's public, but defining an enum inside a class makes it an inner type of that class. For instance:
namespace MyNamespace
{
public class Foo
{
public enum MyEnum { One, Two, Three }
}
}
In order to access this enum from another class in the MyNamespace
namespace, you have to reference it as Foo.MyEnum
, not just MyEnum
. If you want to reference it as simply MyEnum
, declare it just inside the namespace rather than inside the class:
namespace MyNamespace
{
public class Foo { ... }
public enum MyEnum { One, Two, Three }
}
You can do one of two things.
1- Move the declaration of the enum outside of the class
Today you probably have something like this
public class ClassName
{
public enum Direction
{
north, south, east, west
}
// ... Other class members etc.
}
Which will change to
public class ClassName
{
// ... Other class members etc.
}
// Enum declared outside of the class
public enum Direction
{
north, south, east, west
}
2- Reference the enum using the class name
ClassName.Direction.north
Eg.
public void changeDirection(ClassName.Direction direction) {
dir = direction;
}
Where ClassName
is the name of the class that you declared the enum in.
Put the enum
definition inside of the Program.cs
file, but outside of the Program
class. This will make the enum
type globally accessible without having to reference the class name.
namespace YourApp
{
enum Direction { north, east, south, west };
static class Program
{
}
}
Then you can access it anywhere in any class within the same namespace without the need to specify the class name like this:
Direction d;
d = Direction.north;