Подтвердить что ты не робот

Как получить глобальный доступ к типам перечислений в С#?

Это, наверное, глупый вопрос, но я не могу это сделать. Я хочу настроить некоторые перечисления в одном классе следующим образом:

public enum Direction { north, east, south, west };

Затем этот тип перечисления доступен для всех классов, чтобы, например, имел место какой-то другой класс:

Direction dir = north;

и иметь возможность передавать тип перечисления между классами:

public void changeDirection(Direction direction) {
   dir = direction;
}

Я думал, что установка enum для публики сделает это автоматически возможным, но, похоже, это не видно за пределами класса, в котором я объявлял перечисление.

4b9b3361

Ответ 1

Вы можете сделать одну из двух вещей.

1 - Переместить объявление перечисления вне класса

Сегодня у вас, вероятно, есть что-то вроде этого

public class ClassName
{
  public enum Direction
  {
    north, south, east, west
  }
  // ... Other class members etc.
}

Что изменится на

public class ClassName
{      
  // ... Other class members etc.
}

// Enum declared outside of the class
public enum Direction
{
  north, south, east, west
}

2 - Ссылка на перечисление с использованием имени класса

ClassName.Direction.north

Eg.

public void changeDirection(ClassName.Direction direction) { 
   dir = direction; 
}

Где ClassName - это имя класса, в котором вы указали перечисление.

Ответ 2

Объявить перечисление в области пространства имен, например класса, но не в классе:

namespace MyApplication
{
   public enum Direction { north, east, south, west };
}

В случае, если enum объявлено в классе класса, вы также включили этот класс:

namespace MyApplication
{
   public class MyClass
   {
      public enum Direction { north, east, south, west };
   }
}

Использование:

MyClass.Direction dir = ...

Ответ 3

Это общедоступно, но определение перечисления внутри класса делает его внутренним типом этого класса. Например:

namespace MyNamespace
{
    public class Foo
    {
        public enum MyEnum { One, Two, Three }
    }
}

Чтобы получить доступ к этому перечислению из другого класса в пространстве имен MyNamespace, вы должны указать его как Foo.MyEnum, а не только MyEnum. Если вы хотите ссылаться на него как на просто MyEnum, объявите его только внутри пространства имен, а не внутри класса:

namespace MyNamespace
{
    public class Foo { ... }

    public enum MyEnum { One, Two, Three }
}

Ответ 4

Поместите определение enum внутри файла Program.cs, но вне класса Program. Это сделает тип enum глобально доступным без необходимости ссылаться на имя класса.

namespace YourApp
{    
    enum Direction { north, east, south, west };

    static class Program
    {   
    }
}

Затем вы можете получить к нему доступ в любом месте в любом классе в пределах одного и того же пространства имен без необходимости указывать имя класса следующим образом:

Direction d;
d = Direction.north;

Ответ 5

Имел ту же проблему, когда Enum не работал с внешним пространством имен. Скомпилирована внешняя DLL и исправлена ​​проблема. DD