How to get global access to enum types in C#?

后端 未结 4 389
暗喜
暗喜 2021-02-03 20:14

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,          


        
相关标签:
4条回答
  • 2021-02-03 20:40

    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 = ...
    
    0 讨论(0)
  • 2021-02-03 20:41

    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 }
    }
    
    0 讨论(0)
  • 2021-02-03 20:57

    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.

    0 讨论(0)
  • 2021-02-03 21:00

    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;
    
    0 讨论(0)
提交回复
热议问题